有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java查找列表相同位置的每个列表项的平均值<list<Double>>

嗨,我想找到一个双倍列表的lisf的平均值,并返回一个双倍列表,它是原始列表的平均值。我如何在java streams中做到这一点

List<Double> comupteAverage(List<List<Double>> values)
{
    List<Double> averages=?;
    return averages;
}

每个返回的列表项是原始列表中相同位置的每个列表项的平均值。 我希望我能正确地描述这个问题。 谢谢


共 (1) 个答案

  1. # 1 楼答案

    我假设所有的列表都有相同的大小。您可以使用IntStream()遍历和求和每个列表的同一索引上的值

    第一次迭代IntStream.range(0, l1.size())是从列表的第一项遍历到列表的末尾

    第二次迭代IntStream.range(0, values.size())是到达同一索引上的所有项:l1.get(0), l2.get(0),...

    要获取总和l1.get(0) + l2.get(0) +...,请执行以下操作:

    IntStream.range(0, values.size()).mapToDouble(j -> values.get(j).get(i)).sum()

    然后除以values.size()得到平均值

    试试这个:

    List<Double> l1 = Arrays.asList(2.0, 10.0, 7.0);
    List<Double> l2 = Arrays.asList(7.0, 15.0, 7.0);
    List<Double> l3 = Arrays.asList(3.0, 5.0, 7.0);
    List<List<Double>> values = Arrays.asList(l1, l2, l3);
    
    List<Double> avgList = IntStream.range(0, l1.size()).boxed()
            .map(i -> IntStream.range(0, values.size()).mapToDouble(j -> values.get(j).get(i)).sum()
                    / Double.valueOf(values.size()))
            .collect(Collectors.toList());
    System.out.println(avgList);
    

    输出:

    [4.0, 10.0, 7.0]