小编Che*_*ria的帖子

Java 8重构lambda表达式

我想创建一个使用lambda表达式应用常见统计信息的简单类.我想知道如何避免在statistic()方法中使用switch case?

例如,我可能想要编写一个新的lambda来计算列表的方差等.

谢谢.

public class DescriptiveStatistics {

    public static void main(String[] args) {
        List<Double> numbers = Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0);
        numbers.stream().forEach(n-> System.out.print(n + " "));
        System.out.println();
        System.out.println("Descriptive statistics");
        System.out.println("Sum: " + statistic(numbers, "Sum"));
        System.out.println("Max: " + statistic(numbers, "Max"));
        System.out.println("Min: " + statistic(numbers, "Min"));
        System.out.println("Average: " + statistic(numbers, "Average"));
        System.out.println("Count: " + statistic(numbers, "Count"));
    }

    private static double statistic(List<Double> numbers, String function) {
        switch (function.toLowerCase()) {
            case "sum":
                return numbers.stream().mapToDouble(Double::doubleValue).sum();
            case "max":
                return numbers.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

5
推荐指数
2
解决办法
2864
查看次数

在Java lambda中使用两个流来计算协方差

假设我有两个double数组.我一直在尝试使用Java 8中的Stream.我想我已经理解了主要的想法,但后来我意识到我不确定如何同时操作两个Streams.

例如,我想计算两个数组的协方差.

public class foo {

    public static double mean(double[] xs) {
        return Arrays.stream(xs).average().getAsDouble();
}

    public static void main(String[] args) {
        double[] xs = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        double[] ys = {1517.93, 1757.78, 1981.1, 2215.73, 2942.66, 3558.32, 4063.91, 4521.16, 5101.76, 5234.12};

        System.out.println("Mean of xs: " + mean(xs));
        double xs_sumDeviation = Arrays.stream(xs)
            .boxed()
            .mapToDouble(d -> d.doubleValue() - mean(xs))
            .sum();
       // Covariance
        double covXY = Arrays.stream(xs, ys)
            .mapToDouble(x,y -> {
                  double numerator = (x-mean(xs)* (y-mean(ys);
                  double …
Run Code Online (Sandbox Code Playgroud)

java statistics lambda java-8 java-stream

1
推荐指数
1
解决办法
1350
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×2

lambda ×2

statistics ×1