Java 中,可以使用 forEach 方法与 lambda 表达式实现对集合的遍历,还可以使用 BinaryOperator 结合 reduce 方法实现对集合元素的某种累积操作。本文主要介绍Java中通过lambda表达式forEach BinaryOperator实现for循环迭代代码。

1、使用 forEach 和 lambda 表达式遍历集合

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
        List<String> items = Arrays.asList("apple", "banana", "cherry");
        // 使用 forEach 和 lambda 表达式遍历集合
        items.forEach(item -> System.out.println(item));
  }
}

2、使用 forEach 和方法引用

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
        List<String> items = Arrays.asList("apple", "banana", "cherry");

        // 使用 forEach 和方法引用遍历集合
        items.forEach(System.out::println);
  }
}

3、使用 forEach 遍历和累积操作结合

import java.util.Arrays;
import java.util.List;

public class Main {
  public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 使用 forEach 遍历集合并计算总和
        final int[] sum = {0};
        numbers.forEach(number -> sum[0] += number);
        System.out.println("Sum: " + sum[0]);
  }
}

4、使用BinaryOperator<Integer>和forEach实现代码

import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
      BinaryOperator<Integer> add = (a, b) -> a + b;//lambda a, b : a + b
      BinaryOperator<Integer> sub = (a, b) -> a - b;//lambda a, b : a - b
      // 创建一个新的Map,接受符号和相应的BinaryOperator
      // 相当于 = {"+" : lambda a, b : a + b, "-" : lambda a, b : a - b}
      Map<String, BinaryOperator<Integer>> signs = Map.of("+", add, "-", sub);
      int a = 5; // a = 5
      int b = 3; // b = 3
      //循环遍历map并应用操作
      signs.values().forEach(v -> System.out.println(v.apply(a, b)));
  }
}

注意:Map.of("+", add, "-", sub);用的是Java 10,如果Java 9+可以使用下面代码:

Map<String, BinaryOperator<Integer>> signs = new HashMap<>();
signs.put("+", add);
signs.put("-", sub);

5、代码优化

更好使用IntBinaryOperator来避免装箱,可以使用下面写法的代码:

import java.util.Arrays;
import java.util.List;
import java.util.function.IntBinaryOperator;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
       // signs = {"+" : lambda a, b : a + b, "-" : lambda a, b : a - b}
       Map<String, IntBinaryOperator> signs = Map.of("+", (a, b) -> a + b, "-", (a, b) -> a - b);
       int a = 5; // a = 5
       int b = 3; // b = 3
       // for i in signs.keys(): print(signs[i](a,b))
       signs.values().forEach(v -> System.out.println(v.applyAsInt(a, b)));
  }
}

推荐文档