收集到树形图Java 8

时间:2018-11-03 13:16:44

标签: java lambda treemap collect

我想通过处理以下内容将结果收集到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>>

1 个答案:

答案 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));