使用流从地图中求和值并收集到列表

如果我有一个列表列表:


List<List<Map<String, Object>>> myList = new ArrayList<>();


List<Map<String, Object>> e1 = new ArrayList<>();

e1.add(new HashMap<String, Object>(){{put("test", 1);}});

e1.add(new HashMap<String, Object>(){{put("test", 6);}});


List<Map<String, Object>> e2 = new ArrayList<>();

e2.add(new HashMap<String, Object>(){{put("test", 9);}});

e2.add(new HashMap<String, Object>(){{put("test", 2);}});


myList.add(e1);

myList.add(e2);

我希望能够对myList内部列表 (e1和e2) 中的整数求和并返回总和列表:


List<Integer> result = [7, 11]


呼啦一阵风
浏览 142回答 2
2回答

慕标5832272

你可以这样做:List<Integer> result = myList.stream()&nbsp; &nbsp; &nbsp; &nbsp; .map(list -> list.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .flatMapToInt(map -> map.values()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .mapToInt(i -> (int) i))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .sum())&nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());

三国纷争

这是另一种更全球化的替代方法ernest_k解决方案更好更优雅,但这可能会帮助您了解更多关于流的信息&nbsp; &nbsp; BinaryOperator<Object> accumulator = (a, b) -> Double.parseDouble("" + a) + Double.parseDouble("" + b);&nbsp; &nbsp; List sums = myList.stream().map((e) -> e.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map((content) -> content.values().stream().reduce(0, accumulator)).reduce(0, accumulator))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());&nbsp; &nbsp; System.out.println("sums \n"+sums);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java