Java8为Iterable接口新增forEach(Consumer action)方法,Iterable接口是Collection接口的父接口,Collection集合也可调用该方法。当程序调用该方法遍历时,会依次将集合元素传给Consumer的accept(T t)方法(Iterable接口中唯一的抽象方法)。
1、forEach 和 Map
1.1常规循环Map常用的方法
Map<String ,Integer> items = new HashMap<>();
items.put("A",10);
items.put("B",20);
items.put("C",30);
items.put("D",40);
items.put("E",50);
items.put("F",60);
//普通方法循环map
for(Map.Entry<String Integer> entry : items.entrySet()){
System.out.println("Item : "+enty.getKey() + " Count :" + entry.getVlaue())
}
1.2 在Java 8中, 可以用forEach + lambda表达式来循环Map
Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
items.forEach((k,v)->System.out.println(" Item : "+ k + " Count : " + v));
//forEach + lambda表达式来循环Map
//items.forEach((k,v)->{System.out.println(" Item : "+ k + " Count : " + v);});
items.forEach((k,v)->{
System.out.println("Item : " + k + " Count : " + v);
if("E".equals(k)){
System.out.println("Hello E");
}
});
2、forEach 和 List
2.1、常规的循环List的方法
List<String> items = new ArrayList<>();
items.add("Anna");
items.add("Brian");
items.add("Cici");
items.add("Elena");
//常规的循环List的方法
for(String item : items){
System.out.println(item);
}
2.2、在Java 8中, 可以用forEach + lambda表达式 或者方法调用来循环List
package com.foreach.learn;
import java.util.ArrayList;
import java.util.List;
public class forEachLearnList {
public static void main(String[] args) {
List<String> items = new ArrayList<>();
items.add("Anna");
items.add("Brian");
items.add("Cici");
items.add("Elena");
//常规的循环List的方法
for(String item : items){
System.out.println(item);
}
//在Java 8中, 你可以用forEach + lambda表达式 或者方法调用来循环Map
//lambda
//输出 : Anna, Brian, Cici, Elena
items.forEach(item->System.out.println(item));
//输出 Cici
items.forEach(item->{
if("Cici".equals(item)){
System.out.println(item);
}
});
//方法调用
//输出 : Anna, Brian, Cici, Elena
items.forEach(System.out::println);
//Stream and filter
//输出Brian
items.stream()
.filter(s->s.contains("Brian"))
.forEach(System.out::println);
}
}
3、 在Java 8中, 可以用forEach + lambda表达式 或者方法调用来循环Set
public class CollectionEach {
public static void main(String[] args)
{
Collection books = new HashSet();
books.add("轻量级Java EE企业应用实战");
books.add("疯狂Java 讲义");
books.add("疯狂Android 讲义");
books.forEach(obj -> System.out.println("迭代集合元素:" + obj));
}
}
输出结果:
迭代集合元素:疯狂Java 讲义
迭代集合元素:轻量级Java EE企业应用实战
迭代集合元素:疯狂Android 讲义
参考连接: