龙空技术网

Java 8 forEach examples

牛哥在北京 86

前言:

现在咱们对“java中foreach”大致比较重视,咱们都需要知道一些“java中foreach”的相关文章。那么小编同时在网上搜集了一些对于“java中foreach””的相关知识,希望看官们能喜欢,各位老铁们快快来学习一下吧!

1. 概览

在 Java 8 中,我们可以使用 forEach 来遍历 Map,List,Set、Stream。

本文主要介绍:

1、遍历 Map

2、遍历 List

3、forEach 和 Consumer

4、forEach vs forEach Ordered

2. 遍历 Map2.1 Java 5 方式遍历 Map

@Testpublic void loopMapJava5() {  Map<String, Integer> map = new HashMap<>();  map.put("A", 10);  map.put("B", 20);  map.put("C", 30);  map.put("D", 40);  map.put("E", 50);  for (Map.Entry<String, Integer> entry : map.entrySet()) {    System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());  }}

输出:

key: A, value: 10key: B, value: 20key: C, value: 30key: D, value: 40key: E, value: 50
2.2 Java 8 方式遍历 Map
@Testpublic void loopMapJava8() {  Map<String, Integer> map = new HashMap<>();  map.put("A", 10);  map.put("B", 20);  map.put("C", 30);  map.put("D", 40);  map.put("E", 50);  map.forEach((k, v) -> System.out.println("key: " + k + ", Value: " + v));}

输出:

key: A, value: 10key: B, value: 20key: C, value: 30key: D, value: 40key: E, value: 50
2.3 Map 中包含 key 或 value 等于 null 的元素
  @Test  public void givenNullKeyOrNullValue_loopMapJava8() {    Map<String, Integer> map = new HashMap<>();    map.put(null, 10);    map.put("B", null);    map.put("C", 30);    map.put("D", 40);    map.put("E", 50);    map.forEach((k, v) -> System.out.println("key: " + k + ", Value: " + v));  }

输出:

key: null, Value: 10key: B, Value: nullkey: C, Value: 30key: D, Value: 40key: E, Value: 50

null key、null value 被正常输出。

3. 遍历 List3.1 Java 5 方式遍历 List

@Testpublic void loopListJava8() {  List<String> list = new ArrayList<>();  list.add("A");  list.add("B");  list.add("C");  list.add("D");  list.add("E");  list.forEach(System.out::println);}

输出:

ABCDE
3.2 Java 8 方式遍历 List
@Testpublic void loopListJava8() {  List<String> list = new ArrayList<>();  list.add("A");  list.add("B");  list.add("C");  list.add("D");  list.add("E");  list.forEach(System.out::println);}

输出:

ABCDE
3.3 List 中包含 null 元素
@Testpublic void givenNullElement_loopListJava8() {  List<String> list = new ArrayList<>();  list.add("A");  list.add(null);  list.add("C");  list.add("D");  list.add("E");  // 过滤null元素  list.stream()      .filter(Objects::nonNull)      .forEach(System.out::println);}

输出:

ACDE

null 元素被过滤。

4. forEach 和 Consumer

for Each 可以接收函数式接口 Consumer 作为参数:

@Testpublic void foreEachConsumer() {  List<Integer> list = Arrays.asList(0, 1, 255);  Stream<Integer> stream = Stream.of(0, 1, 255);  Consumer<Integer> toHexConsumer = (Integer x) -> {    String hex = Integer.toHexString(x);    System.out.print(String.format("%n%-10s: %s", x, hex));  };  list.forEach(toHexConsumer);  System.out.println();  stream.forEach(toHexConsumer);}

输出:

0         : 01         : 1255       : ff0         : 01         : 1255       : ff
5. forEach vs forEachOrdered
@Testpublic void forEachOrdered() {  Stream<String> stream = Stream.of("4", "5", "1", "3", "2");  // 不保证顺序,不管是顺序(sequential)输出还是并行(parallel)输出  stream.parallel().forEach(x -> System.out.println(x));  stream = Stream.of("4", "5", "1", "3", "2");  // 保障顺序, 总是输出 4", "5", "1", "3", "2"  stream.parallel().forEachOrdered(x -> System.out.println(x));}

输出:

--- 不保证顺序 ---31246--- 保证顺序 ---12345
6. 总结

本文简明介绍了 Java 8 中的 forEach 的用法。

文章中用到的示例代码,在 Gitee 中可以快速查看、下载、运行。

All test passed on Java 8.

标签: #java中foreach