地图定义为:
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");
我的预期输出是列表,其中仅包含没有重复值的键。
5
6
我的方法和思考过程:
思考过程1:
我将采取map.entrySet().stream().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
输出是显而易见的,因为我从流中选取的值是我在池中比较它的值,其中该值将始终至少出现一次。
我再次想到,如果我可以有一个计数器来计数,并且如果该值存在,那么它就会增加,但现在一切似乎都非常模糊。
我可以使用流通过索引进行迭代的任何方式,以便我始终可以保留我正在获取的键值并仅与其余值进行比较。
希望得到简短的解释。
幕布斯6054654
小唯快跑啊
相关分类