リストまたはセットの最初の要素を取得できるかどうかを知りたいのですが。どの方法を使用しますか?
Collection c;
Iterator iter = c.iterator();
Object first = iter.next();
(これがSet
の「最初の」要素を持つことに最も近いでしょう。これはSet
のほとんどの実装にとって絶対に意味がないことを理解するべきです。これはLinkedHashSetとTreeSetには意味がありますが、HashSetには意味がありません。)
Java> = 8では、ストリーミングAPIを使うこともできます。
Optional<String> first = set.stream().findFirst();
(Set/Listが空の場合に便利です。)
最初のアイテムを取得したいList<String> strings
があるとしましょう。
それにはいくつかの方法があります。
Java(8以前):
String firstElement = null;
if (!strings.isEmpty() && strings.size() > 0) {
firstElement = strings.get(0);
}
Java 8:
Optional<String> firstElement = strings.stream().findFirst();
グアバ
String firstElement = Iterables.getFirst(strings, null);
Apacheコモン(4+)
String firstElement = (String) IteratorUtils.get(strings, 0);
Apacheコモン(4より前)
String firstElement = (String) CollectionUtils.get(strings, 0);
その後に続くか、適切なチェックまたはtry-catchブロック内にカプセル化されます。
コトリン:
Kotlinでは、 Arrays とほとんどの Collections (例:List)の両方がfirst
メソッド呼び出しを持ちます。だからあなたのコードはこのようになります
リストの場合:
val stringsList: List<String?> = listOf("a", "b", null)
val first: String? = stringsList.first()
配列の場合:
val stringArray: Array<String?> = arrayOf("a", "b", null)
val first: String? = stringArray.first()
グアバの解決策をまだ誰も提案していないことに驚きました。
com.google.common.collect.Iterables.get(collection, 0)
// or
com.google.common.collect.Iterables.get(collection, 0, defaultValue)
// or
com.google.common.collect.Iterables.getFirst(collection, defaultValue)
あるいは、単一の要素を期待しているなら:
com.google.common.collect.Iterables.getOnlyElement(collection, defaultValue)
// or
com.google.common.collect.Iterables.getOnlyElement(collection)
セット
set.toArray()[0];
リスト
list.get(0);
これはこの質問に対する正確な答えではありませんが、オブジェクトをソートする必要がある場合にはSortedSetにはfirst()メソッドがあります。
SortedSet<String> sortedSet = new TreeSet<String>();
sortedSet.add("2");
sortedSet.add("1");
sortedSet.add("3");
String first = sortedSet.first(); //first="1"
ソートされたオブジェクトはComparableインタフェースを実装しなければなりません(Stringが行うように)
Java8 そしてさらに
Set<String> set = new TreeSet<>();
set.add("2");
set.add("1");
set.add("3");
String first = set.stream().findFirst().get();
これはリストや集合の最初の要素を取得するのに役立ちます。セットまたはリストが空ではないと仮定します(空のオプションのget()
はJava.util.NoSuchElementException
をスローします)。
orElse()
は次のように使用できます。(これは単なる回避策です。お勧めしません)
String first = set.stream().findFirst().orElse("");
set.removeIf(String::isEmpty);
適切な方法は次のとおりです。
Optional<String> firstString = set.stream().findFirst();
if(firstString.isPresent()){
String first = firstString.get();
}
同様にリストの最初の要素を取得することができます。
お役に立てれば。
Listから要素にアクセスするには、get(index)メソッドを使用できます。
集合は、定義により、単に要素を含み、特定の順序はありません。したがって、「最初の」要素を取得することはできませんが、(for eachループを使用して)イテレータを使用して繰り返したり、toArray()メソッドを使用して配列に変換したりすることができます。