根据 Java 中的值获取第一个 LinkedHashMap 键
Get first LinkedHashMap key based on value in Java
我使用以下 LinkedHashMap
并得到数字的出现次数 <number, occurences>
。
Map<Integer, Integer> map = new LinkedHashMap<>();
存储在地图中的值如下:
key | value
4 | 2
10 | 2
5 | 1
3 | 1
我想获取第一个值为 1 的键(在示例中为 5)。如果没有值为 1 的键,则为 returns -1。我使用以下方法,但我认为这不是正确的方法,可能有更好或更短的方法来做到这一点:
int key = map.containsValue(1) ?
map.entrySet().stream()
.filter(entry -> entry.getValue() == 1)
.map(Map.Entry::getKey).findFirst().get() : -1;
那么,有没有更好的方法来实现这一点?
与其先检查 containsValue
,不如在由 findFirst
编辑的可选 return 上使用 orElse
,这减少了地图的一次迭代。
int key = map.entrySet().stream()
.filter(entry -> entry.getValue() == 1)
.map(Map.Entry::getKey).findFirst().orElse(-1);
findFirst
将 return 一个空的可选项,如果在过滤器之后没有留下任何东西。只有当地图中没有值 1 开始时才会发生这种情况。 orElse
return 是它的参数,如果可选是空的,否则它 return 是包装的值。
我使用以下 LinkedHashMap
并得到数字的出现次数 <number, occurences>
。
Map<Integer, Integer> map = new LinkedHashMap<>();
存储在地图中的值如下:
key | value
4 | 2
10 | 2
5 | 1
3 | 1
我想获取第一个值为 1 的键(在示例中为 5)。如果没有值为 1 的键,则为 returns -1。我使用以下方法,但我认为这不是正确的方法,可能有更好或更短的方法来做到这一点:
int key = map.containsValue(1) ?
map.entrySet().stream()
.filter(entry -> entry.getValue() == 1)
.map(Map.Entry::getKey).findFirst().get() : -1;
那么,有没有更好的方法来实现这一点?
与其先检查 containsValue
,不如在由 findFirst
编辑的可选 return 上使用 orElse
,这减少了地图的一次迭代。
int key = map.entrySet().stream()
.filter(entry -> entry.getValue() == 1)
.map(Map.Entry::getKey).findFirst().orElse(-1);
findFirst
将 return 一个空的可选项,如果在过滤器之后没有留下任何东西。只有当地图中没有值 1 开始时才会发生这种情况。 orElse
return 是它的参数,如果可选是空的,否则它 return 是包装的值。