如何使用map计算列表中整数列表的总和,并获得一个新列表,其中每个条目对应于每个计算出的总和?

时间:2019-05-12 07:43:15

标签: java

我有一个List<List<Integer>>,需要计算列表中每个列表的总和并将它们存储在新列表中,以便所述新列表具有多个条目,每个条目对应于先前计算的总和。

不幸的是,这是我到目前为止所得到的,它无法编译,而且恐怕我对Java 8运算符的了解还不够,还无法自行解决。

List<Integer> sums = lists.map(return new Function<List<Integer>, 
Integer>(){
    @Override
    public Integer call(List<Integer> list){
        int sum = list.stream().reduce(0, (x,y) -> x+y);
        return new Integer(sum);
    }
});

3 个答案:

答案 0 :(得分:2)

您的意思是:

List<Integer> sums = lists.stream()
        .map(l -> l.stream().reduce(0, Integer::sum))
        .collect(Collectors.toList());

答案 1 :(得分:2)

我会建议:

List<Integer> sumList = list.stream().map(l -> l.stream().mapToInt(Integer::intValue).sum()).collect(Collectors.toList());

答案 2 :(得分:1)

我不确定您到底想达到什么目的,但是以下条件之一会匹配... 无需使用reduce(),Java stream()改为使用mapToInt()sum()

List<Integer> ints = Arrays.asList(1,2,3,4,5,6,7);
List<List<Integer>> intsLists = Arrays.asList(ints, ints, ints);

// get the sum of a single list
Integer sumSingleList = ints.stream().mapToInt(Integer::intValue).sum();
// sum multiple lists within a list, get a result per list
List<Integer> sumsMultiList = intsLists.stream().map(e -> e.stream().mapToInt(Integer::intValue).sum()).collect(Collectors.toList());
// sum all lists, get a single total
Integer sumTotalMultiList = intsLists.stream().map(e -> e.stream().mapToInt(Integer::intValue).sum()).mapToInt(Integer::intValue).sum();