获取具有给定值的第一个LinkedHashMap键

问题描述 投票:0回答:1

我使用以下

LinkedHashMap
并将数字的出现次数设为
<number, occurences>

Map<Integer, Integer> map = new LinkedHashMap<>();

地图中存储的值如下:

key | value
4   | 2
10  | 2
5   | 1
3   | 1

我想获取第一个值为 1 的键(在示例中为 5)。如果不存在值为 1 的键,则返回 -1。我使用以下方法,但我认为这不是正确的方法,可能有更好或更短的方法来做到这一点:

int key = map.containsValue(1) ?
                map.entrySet().stream()
                   .filter(entry -> entry.getValue() == 1)
                   .map(Map.Entry::getKey).findFirst().get() : -1;

有没有更好的方法来实现这个目标?

java java-stream linkedhashmap
1个回答
2
投票

不要先检查

containsValue
,而是在 orElse
 返回的选项上使用 
findFirst
,这样可以减少地图的一次迭代。

int key = map.entrySet().stream()
               .filter(entry -> entry.getValue() == 1)
               .map(Map.Entry::getKey).findFirst().orElse(-1);
如果过滤器后没有留下任何内容,

findFirst
将返回一个空选项。仅当映射中不存在值 1 时才会发生这种情况。如果可选值为空,则
orElse
返回其参数,否则返回包装后的值。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.