【发布时间】:2019-09-06 09:16:42
【问题描述】:
地图定义为:
Map<Integer,String> map = new HashMap<>();
map.put(2,"ram");
map.put(3,"ram");
map.put(4,"gopal");
map.put(5,"madan");
map.put(6,"shyam");
map.put(7,"gopal");
map.put(8,"ram");
我的预期输出是 List,其中仅包含没有重复值的键。
5
6
我的方法和思考过程:
思考过程一:
我会采用map.entrySet().stream().map(....),然后在 map 中采用另一个流并过滤存在重复值的值。
这种方法很快就被浪费了,因为第一个索引值将在嵌套流中再次进行比较,因此我碰巧过滤掉了所有元素。
思维过程2
我将值保存在不同的 List 中:
List<String> subList = map.entrySet().stream()
.map((k)->k.getValue())
.collect(Collectors.toList());
然后:
map.entrySet().stream()
.filter(s ->
subList.contains(s.getValue()) )
.map(Map.Entry::getKey)
.collect(Collectors.toList());
但我得到的输出为
2
3
4
5
6
7
8
输出很明显,因为我从流中选择 s 的值我在池中比较它,该值将始终存在至少一次。
然后我再次想到,如果我可以有一个计数计数的计数器,并且如果该值存在,那么它将增加,但现在一切似乎都非常模糊。
我可以使用流通过索引进行迭代的任何方式,这样我就可以始终保留我正在使用的键值并与其余值进行比较。
希望得到一个简短的解释。
【问题讨论】: