Javaでリストの最後の値を取得する
この投稿では、Javaでリストの最後の値を取得する方法について説明します。
1.使用する List.get()
方法
The size()
メソッドは、リストに存在するアイテムの総数を返します。最後の要素を取得するには、式を使用できます L.get(L.size() - 1)
どこ L
あなたのリストです。完全なコードは次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; class Main { public static void main(String[] args) { List<Character> chars = IntStream.rangeClosed(65, 90) .mapToObj(x -> (char)x) .collect(Collectors.toList()); Character lastItem = chars.get(chars.size() - 1); System.out.println(lastItem); // 'Z' } } |
ただし、これは IndexOutOfBoundsException
リストが空の場合。これを処理するために、リストを呼び出す前に、リストに追加のサイズチェックを含むユーティリティメソッドを作成できます。 get()
方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; class Main { public static <T> T getLast(List<T> list) { if (list != null && !list.isEmpty()) { return list.get(list.size() - 1); } return null; } public static void main(String[] args) { List<Character> chars = IntStream.rangeClosed(65, 90) .mapToObj(x -> (char)x) .collect(Collectors.toList()); Character lastItem = getLast(chars); System.out.println(lastItem); // 'Z' } } |
2.Guavaの使用
Google Guavaを使用すると、 Iterables.getLast()
iterableの最後の要素を取得するために特別に設計されたメソッド。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import com.google.common.collect.Iterables; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; class Main { public static void main(String[] args) { List<Character> chars = IntStream.rangeClosed(65, 90) .mapToObj(x -> (char)x) .collect(Collectors.toList()); Character lastItem = Iterables.getLast(chars); System.out.println(lastItem); // 'Z' } } |
このメソッドは java.util.NoSuchElementException
iterableが空の場合。ただし、2番目のパラメータにデフォルト値を指定できます Iterables.getLast()
例外を回避する方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import com.google.common.collect.Iterables; import java.util.List; class Main { public static void main(String[] args) { List<Integer> emptyList = List.of(); Integer lastItem = Iterables.getLast(emptyList, null); System.out.println(lastItem); // null } } |
3.StreamAPIの使用
StreamAPIを使用したソリューションは次のとおりです。アイデアは、リスト内のすべての要素のストリームを取得し、最初の要素をスキップすることです n-1
その中の要素 n
はリストのサイズであり、ストリームに残っている唯一の要素を返します。
このアプローチを以下に示します。 RandomAccessをサポートするリストにはお勧めしません。これは、 O(1)
上記の方法による時間。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; class Main { public static <T> T getLast(List<T> list) { return list.stream().skip(list.size() - 1).findFirst().orElse(null); } public static void main(String[] args) { List<Character> chars = IntStream.rangeClosed(65, 90) .mapToObj(x -> (char)x) .collect(Collectors.toList()); Character lastItem = getLast(chars); System.out.println(lastItem); // 'Z' } } |
4.forループの使用
単純なアプローチは、forループを使用してアレイを反復処理し、最後の要素を返すことです。このアプローチは非常に非効率的であるため、お勧めしません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; class Main { public static <T> T getLast(List<T> list) { T lastItem = null; for (T e : list) { lastItem = e; } return lastItem; } public static void main(String[] args) { List<Character> chars = IntStream.rangeClosed(65, 90) .mapToObj(x -> (char)x) .collect(Collectors.toList()); Character lastItem = getLast(chars); System.out.println(lastItem); // 'Z' } } |
これで、Javaでリストの最後の値を取得できます。