温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - How to look up value in a list of map?
java java-8 java-stream

java - 如何在 map列表中查找值?

发布于 2020-03-27 11:58:54

我有List<Map<Integer, Map<Integer, Long>>>给定两个键,如何Long使用流返回值?

例如

    List<Map<Integer, Map<Integer, Long>>> listOfMap = new ArrayList<>();

    Map<Integer, Map<Integer, Long>> lMap1 = new HashMap<>();
    Map<Integer, Long> map1 = new HashMap<>();
    map1.put(10, 100L);
    map1.put(20, 200L);
    lMap1.put(1, map1);
    listOfMap.add(lMap1);

    Map<Integer, Map<Integer, Long>> lMap2 = new HashMap<>();
    Map<Integer, Long> map2 = new HashMap<>();
    map2.put(30, 300L);
    map2.put(40, 400L);
    lMap2.put(2, map2);
    listOfMap.add(lMap2);

给定110,它将返回100

查看更多

查看更多

提问者
Sagar Veeram
被浏览
26
Dhruvil Vaghela 2019-07-03 23:59

假设您要查看列表中的每个Map并检查嵌套Map中的两个键,则可以执行以下操作-

OptionalLong optional = listOfMap.stream().filter(x -> x.containsKey(1) && x.get(1).containsKey(10)).mapToLong(x -> x.get(1).get(10)).findFirst();
if (optional.isPresent()) {
  return optional.getAsLong();
}

使用流来迭代包含具有所需值的映射的列表和过滤器元素,并返回匹配条件的第一个元素。

对于聚合,您可以通过添加以0开头的标识来代替findFirst()。

long l = listOfMap.stream().filter(x -> x.containsKey(1) && x.get(1).containsKey(10)).mapToLong(x -> x.get(1).get(10)).reduce(0L, (left, right) -> left + right);