如何从Java中的Map List中获取所有值?

时间:2017-04-10 12:37:48

标签: java hashmap

我有p.second List

Map

我想获取所有值,并检查上面的List(Map(term -> check), Map(term -> base), Map(term -> prof.gaurav), Map(term -> phone), Map(term -> scraper), Map(term -> with), Map(term -> certificate), Map(term -> six), Map(term -> itself)) 列表中是否已存在某个术语。

这可以通过迭代Map并检查每个地图的值来完成。但是我想要一些更有效率和一个班轮的东西。

这个问题可能很幼稚,但我不知道怎么办。我是Java的新手。

预期输出:

List

3 个答案:

答案 0 :(得分:1)

鉴于term定义了您要检查存在的术语,您可以这样做:

list.stream()
    .flatMap(map -> map.values().stream())
    .anyMatch(value -> value.equals(term));

.anyMatch(...)替换为.collect(Collectors.toList()),即可获得列表。但是你在问题的前面说过,你想检查一个术语是否存在。

答案 1 :(得分:1)

如果我理解您的问题是否正确,您想检查这些字词是否包含标记?

// To check if any of them contains
boolean anyContains = list.stream().any(m -> m.contains("term"));
// get string which did not have value
list<String> nonUsedTerms = list.stream
                    .filter(m -> !m.contains(term))
                    .map(m -> m.get(term));

答案 2 :(得分:1)

作为第一步,我们可以将Map( term -> List[check,base] )转换为List[check,base],然后我们可以使用Map#getOrDefault方法提取HashMap<String, String> map = new HashMap<>(); map.put("lorem","ipsum"); HashMap<String, String> map1 = new HashMap<>(); map1.put("lorem","dolor"); HashMap<String, String> map2 = new HashMap<>(); map2.put("sit","amet"); HashMap<String, String> map3 = new HashMap<>(); map3.put("sit","consectetur"); List<Map<String,String>> list = Arrays.asList(map, map1, map2, map3); Map<String, List<String>> result = list.stream(). flatMap(m -> m.entrySet().stream()). collect( groupingBy( Map.Entry::getKey, mapping(Map.Entry::getValue, toList()) ) ); // {lorem=[ipsum, dolor], sit=[amet, consectetur]} result.getOrDefault("lorem", Collections.emptyList()); // [ipsum, dolor]

CI-test