web-dev-qa-db-ja.com

Java 8を使用してマップから最初のキー値を取得するにはどうすればよいですか?

今のところ私はやっています:

Map<Item, Boolean> processedItem = processedItemMap.get(i);

        Map.Entry<Item, Boolean> entrySet = getNextPosition(processedItem);

        Item key = entrySet.getKey();
        Boolean value = entrySet.getValue();


 public static Map.Entry<Item, Boolean> getNextPosition(Map<Item, Boolean> processedItem) {
        return processedItem.entrySet().iterator().next();
    }

Java8でこれを行うためのよりクリーンな方法はありますか?

6
user3407267

あなたの方法には2つの問題があります。

  • マップが空の場合は例外がスローされます
  • たとえば、HashMapには順序がありません。したがって、メソッドは実際にはgetAny()というよりもgetNext()に近いものです。

ストリームでは、次のいずれかを使用できます。

//if order is important, e.g. with a TreeMap/LinkedHashMap
map.entrySet().stream().findFirst();

//if order is not important or with unordered maps (HashMap...)
map.entrySet().stream().findAny();

Optionalを返します。

13
assylias

ここにfindFirstが必要なようです

   Optional<Map.Entry<Item, Boolean>> firstEntry =    
        processedItem.entrySet().stream().findFirst();

明らかに、HashMapには順序がないため、findFirstは異なる呼び出しで異なる結果を返す可能性があります。おそらく、より適切な方法は、あなたの場合はfindAnyでしょう。

7
Eugene