根据 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 是包装的值。