我有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
答案 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