如何查找只有一个值的hashmap的键

时间:2017-08-13 09:45:22

标签: java hashmap

任何人都可以帮我找到下面只有一个值的密钥是hashmap

它是Map<String,List<String>>

key    values

A      [cricket, writing]
B      [READING, coding]
c      [music]

输出应为:

c因为List

中只有一个值

3 个答案:

答案 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());