我使用以下
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;
有没有更好的方法来实现这个目标?
不要先检查
containsValue
,而是在 orElse
返回的选项上使用
findFirst
,这样可以减少地图的一次迭代。
int key = map.entrySet().stream()
.filter(entry -> entry.getValue() == 1)
.map(Map.Entry::getKey).findFirst().orElse(-1);
如果过滤器后没有留下任何内容,findFirst
将返回一个空选项。仅当映射中不存在值 1 时才会发生这种情况。如果可选值为空,则orElse
返回其参数,否则返回包装后的值。