任何人都可以帮我找到下面只有一个值的密钥是hashmap
:
它是Map<String,List<String>>
key values
A [cricket, writing]
B [READING, coding]
c [music]
输出应为:
c
因为List
答案 0 :(得分:2)
你需要遍历地图字符串/列表对,找到lst大小为1的那个:
Classic forLoop解决方案:
String keyOneValue="";
for(Map.Entry<String,List<String>> entry : map.entrySet()){
if(entry.getValue().size()==1){
keyOneValue = entry.getKey();
break;
}
}
System.out.println(keyOneValue); // c
因此当条件为true
时,您会将密钥保存在变量中,break;
将停止循环,因为您找到了一个
用于查找ONE元素的Java 8 Stream解决方案:
String keyOneValue = map.entrySet()
.stream()
.filter(entry -> entry.getValue().size()==1)
.findFirst()
.get()
.getKey();
Java 8 Stream解决方案,用于查找具有一个值的所有密钥:
List<String> keyOneVal = map.entrySet()
.stream()
.filter(entry -> entry.getValue().size()==1)
.map(entry -> entry.getKey())
.collect(Collectors.toList());
答案 1 :(得分:1)
最简单的方法(Java 8)
List<String> onlyOneValue = map.keySet().stream()
.filter(x-> map.get(x)!=null && map.get(x).size()==1)
.collect(Collectors.toList());
System.out.println(onlyOneValue);//C
答案 2 :(得分:1)
使用流的一种衬垫解决方案
Map<String,List<String>> map = new HashMap<>();
map.put("A", Arrays.asList("cricket", "writing"));
map.put("B", Arrays.asList("READING", "coding"));
map.put("C", Arrays.asList("music"));
List<Entry<String, List<String>>> singleValueEntries = map.entrySet().stream().filter(entry -> entry.getValue().size() == 1).collect(Collectors.toList());