【问题标题】:Java: grouping together multiple Lists to one listJava:将多个列表组合到一个列表中
【发布时间】:2014-07-29 15:34:24
【问题描述】:

有没有一种快速的方法来获取List< List<Double> > 并将它们平均,所以我只有一个 Double 列表,其中每一列是该列中所有原始列表的平均值?

【问题讨论】:

  • 您使用的是 Java 8 吗?
  • 是的,我可能早该提过。

标签: java average java-8


【解决方案1】:

使用 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);

【讨论】:

  • 这不是我理解问题的方式。我认为 OP 希望输出 [1.5 2.5 3.5] 供您输入。
  • 很抱歉,我认为您的想法有误。例如,我想要的是将所有列表的第 3 列平均到平均值的第 3 列。
  • 您可以将外部流上的mapToDouble(…).boxed() 替换为mapToObj(…)
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2019-11-02
  • 2021-01-10
  • 2016-07-16
  • 1970-01-01
相关资源
最近更新 更多