web-dev-qa-db-ja.com

ListまたはSetの最初の要素を取得する方法

リストまたはセットの最初の要素を取得できるかどうかを知りたいのですが。どの方法を使用しますか?

235
user496949
Collection c;

Iterator iter = c.iterator();

Object first = iter.next();

(これがSetの「最初の」要素を持つことに最も近いでしょう。これはSetのほとんどの実装にとって絶対に意味がないことを理解するべきです。これはLinkedHashSetとTreeSetには意味がありますが、HashSetには意味がありません。)

227
bdares

Javadocを見る

/ リスト

list.get(0);

または 設定

set.iterator().next();

そしてisEmpty()を呼び出して上記のメソッドを使う前にサイズをチェックしてください

!list_or_set.isEmpty()
258
stacker

Java> = 8では、ストリーミングAPIを使うこともできます。

Optional<String> first = set.stream().findFirst();

(Set/Listが空の場合に便利です。)

95
Sonson123

最初のアイテムを取得したい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()
20
Ch Vas

グアバの解決策をまだ誰も提案していないことに驚きました。

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)
19

セット

set.toArray()[0];

リスト

list.get(0);
9
Vasil Valchev

これはこの質問に対する正確な答えではありませんが、オブジェクトをソートする必要がある場合には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が行うように)

6
molholm

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();
}

同様にリストの最初の要素を取得することができます。

お役に立てれば。

6
Nisarg Patil

Listから要素にアクセスするには、get(index)メソッドを使用できます。

集合は、定義により、単に要素を含み、特定の順序はありません。したがって、「最初の」要素を取得することはできませんが、(for eachループを使用して)イテレータを使用して繰り返したり、toArray()メソッドを使用して配列に変換したりすることができます。

2
Feni