Lambda表达式查找总和

时间:2017-08-31 14:45:12

标签: java lambda java-8

我有一个课程如下:

public class Class2 {

private final Integer x;

private final Integer y;

public Class2(final Integer x, Integer y) {
    this.x = x;
    this.y = y;
}

public Integer getX() {
    return x;
}

public Integer getY() {
    return y;
}

}

我有一个如下所示的Map对象:

Map<MyEnum , List<Class2>> mapX

我想找到x&amp;的总和y List实例中Class2实例的成员,它们是上述映射中的值项。我想使用lambda表达式

我想出了以下不完整的lambda。提前谢谢。

        mapX.entrySet().forEach(entry -> {
            System.out.println("MapX-Key : " + entry.getKey() + "\nMapX-Value : "
                    + entry.getValue().stream().collect(Collectors.summingInt(???)));
        });

2 个答案:

答案 0 :(得分:2)

不太确定你要问的是什么,但其中一个应该有所帮助:

// Using Class2
Map<MyEnum , List<Class2>> mapX = null;
mapX.entrySet().forEach(entry -> {
        System.out.println("MapX-Key : " + entry.getKey() + "\nMapX-Value : "
                + entry.getValue().stream()
                .collect(Collectors.summingInt(x -> x.getX() + x.getY())));
});

// Values from Class2 via Class1
Map<MyEnum , List<Class1>> map1 = null;
map1.entrySet().forEach(entry -> {
        System.out.println("MapX-Key : " + entry.getKey() + "\nMapX-Value : "
                + entry.getValue().stream()
                .collect(Collectors.summingInt(x -> x.getClass2().getX() + x.getClass2().getY())));
});

答案 1 :(得分:2)

你可以这样:

mapX.entrySet().stream()
               .map(entry -> "MapX-Key : " + entry.getKey() 
                           + "\nMapX-Value : " 
                           + entry.getValue().stream().mapToInt(e -> e.getX() + e.getY()))
               .forEach(System.out::println);

这将迭代每个Entry,然后(map)创建一个包含密钥的字符串,然后是xy的总和,最后print他们