如何使用JAVA 8从map获取第一个键值?

时间:2017-04-26 06:57:41

标签: java java-8 iterator java-stream

至于现在我在做什么:

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做到这一点?

2 个答案:

答案 0 :(得分:13)

我发现你的方法存在两个问题:

  • 如果地图为空,它将抛出异常
  • 例如,
  • 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

答案 1 :(得分:6)

好像你需要//pseudo: if(count == 1 ) output state_CONNECTED; elseif(count > 1) output state_DISCONNECTED; 这里

findFirst

显然 Optional<Map.Entry<Item, Boolean>> firstEntry = processedItem.entrySet().stream().findFirst(); 没有顺序,因此findFirst可能会在不同的调用中返回不同的结果。对于你的案例,可能更合适的方法是HashMap