我有一个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);
}
});
答案 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();