Java:将多个列表分组为一个列表

Java:将多个列表分组为一个列表,java,average,java-8,Java,Average,Java 8,有没有一种快速的方法来获取一个列表并对其进行平均,这样我就只有一个双列表,其中每列都是该列所有原始列表的平均值?使用Java 8,您可以编写类似这样的内容-虽然它并不短 List<List<Double>> list = Arrays.asList(Arrays.asList(1d, 2d, 3d), Arrays.asList(2d, 3d, 4d, 5d)); //the largest

有没有一种快速的方法来获取一个
列表
并对其进行平均,这样我就只有一个双列表,其中每列都是该列所有原始列表的平均值?

使用Java 8,您可以编写类似这样的内容-虽然它并不短

List<List<Double>> list = Arrays.asList(Arrays.asList(1d, 2d, 3d),
                                        Arrays.asList(2d, 3d, 4d, 5d));

//the largest list size
int maxSize = list.stream().mapToInt(List::size).max().orElse(0);

//for each index in the final list, we calculate the average across "valid" lists
//i.e. lists that are large enough
List<Double> averages = IntStream.range(0, maxSize)
                        .mapToObj(i -> list.stream()
                                            .filter(sublist -> sublist.size() > i)
                                            .mapToDouble(sublist -> sublist.get(i))
                                            .average().getAsDouble())
                        .collect(toList());

//prints averages = [1.5, 2.5, 3.5, 5.0]
System.out.println("averages = " + averages);
List List=Arrays.asList(Arrays.asList(1d、2d、3d),
数组.asList(2d、3d、4d、5d));
//最大的列表大小
int maxSize=list.stream().mapToInt(list::size).max().orElse(0);
//对于最终列表中的每个索引,我们计算“有效”列表的平均值
//i、 e.足够大的列表
列表平均值=IntStream.range(0,maxSize)
.mapToObj(i->list.stream()
.filter(子列表->子列表.size()>i)
.mapToDouble(子列表->子列表.get(i))
.average().getAsDouble())
.collect(toList());
//打印平均值=[1.5,2.5,3.5,5.0]
System.out.println(“平均值=”+平均值);

您在使用Java 8吗?是的,我可能应该在前面提到这一点。我不是这样理解这个问题的。我以为OP想要[1.5 2.5 3.5]的输出作为您的输入。很抱歉,我认为您的想法是错误的。例如,我想要的是将所有列表的第3列平均化为第3列平均值。您可以将外部流上的
mapToDouble(…).boxed()
替换为
mapToObj(…)