我想通过处理以下内容将结果收集到TreeMap<Integer,Double>
中:
TreeMap<Integer,ArrayList<String>>
。
TreeMap<Integer,Double> result2 = units.entrySet().stream()
.filter(v -> v.getValue().size()>3)
.filter(v -> !v.getValue().get(1).isEmpty() && !v.getValue().get(2).isEmpty())
.mapToDouble(v -> mult( v.getValue().get(1), v.getValue().get(2)))
.collect();
基本上,我的工作是从流中从Strings的ArrayList中获取值,并过滤掉没有值的值,并通过使用lambda表达式内的mult函数获得2nd和3rd元素的乘积。现在,我不知道如何收集到TreeMap,其中的键是经过处理的TreeMap的键,称为unit,值应该是我在mapToDouble中计算的乘积。
注意:单位是TreeMap<Integer,ArrayList<String>>
答案 0 :(得分:0)
您必须将构造函数引用TreeMap::new
显式传递给地图工厂。合并功能只是一个虚拟的功能,此处未使用。检查一下,
TreeMap<Integer, Double> result2 = units.entrySet().stream().filter(v -> v.getValue().size() > 3)
.filter(v -> !v.getValue().get(1).isEmpty() && !v.getValue().get(2).isEmpty())
.collect(Collectors.toMap(Map.Entry::getKey,
e -> mult(e.getValue().get(1), e.getValue().get(2))),
(v1, v2) -> v1, TreeMap::new));
即使您可以像这样直接计算两个数字的乘积,
TreeMap<Integer, Double> result2 = units.entrySet().stream().filter(v -> v.getValue().size() > 3)
.filter(v -> !v.getValue().get(1).isEmpty() && !v.getValue().get(2).isEmpty())
.collect(Collectors.toMap(Map.Entry::getKey,
e -> Double.parseDouble(e.getValue().get(1)) * Double.parseDouble(e.getValue().get(1)),
(v1, v2) -> v1, TreeMap::new));