java8 forEach教程
Java8引入了forEach用于元素的迭代--集合、数组和Map。它允许开发者使用一个内部迭代器来迭代集合*。这可以与Lambda表达式和方法引用*一起使用。
Java 7的每个循环例子
为了迭代字符串列表,我们使用了for each增强迭代。
List list = new ArrayList();
list.add("one"); list.add("two"); list.add("three"); list.add("four");
for (String str : list) {
System.out.println(str);
}
上述代码的输出是
在java8中,forEach是对象集合中的一种新的迭代方式。
java8 foreach 语法
void forEach(Consumer action);
集合中的每个元素都被应用于消费者动作,forEach与实现消费者的类一起传递。Consumer是一个功能接口,只有一个抽象的方法,接受一个输入参数,不产生输出。请看其他博文关于消费者接口教程和原始消费者教程。
forEach消费者实例
创建一个字符串列表 通过创建一个具有accept()实现的消费者接口对象,创建了一个匿名的内类。每个元素都被传递给accept方法,并且没有任何输出。
list.forEach(new Consumer() {
@Override
public void accept(String name) {
System.out.println(name);
}
});
这是一个消费者功能接口的实现例子。我们将看到一种流行的使用Lambda表达式的内联实现方式
如何使用Lambda表达式forEach实例
Lambda表达式用于启动Function接口对象的创建,避免了匿名的内部类的实现,请看一下Lambda表达式同样的代码用Lambda表达式重写,它的代码很简单。
list.forEach((String name) -> {
System.out.println(name);
});
如何在forEach实例中使用方法引用
java8中引入了方法引用,用于调用一个功能接口的方法。这是用方法引用代替lambda表达式。这是使用foreach与Method reference的另一种方式。
list.forEach(System.out::println);
如何在Map上使用forEach的Lambda表达式示例
使用forEach创建了一个包含key和value的Map列表,使用lambda表达式显示key和value。
Map map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
map.forEach((k, v) -> {
System.out.println( k+":"+ v);
});
输出是
key1:value1
key2:value2
key3:value3
key4:value4
如何在Set上使用forEach的Lambda表达式示例
创建了一个有字符串列表的集合,集合不允许重复,使用forEach和Lambda表达式迭代并打印集合元素。
Set set = new LinkedHashSet<>();
set.add("one");
set.add("two");
set.add("three");
set.forEach((e) -> { System.out.println(e); });
输出结果是
如何在数组数据上使用forEach的Lambda表达式 例子
数组数据可以使用foreach对Array.stream()方法进行迭代。最后,使用lambda表达式来获取元素。
int[] numbers = { 5,9,7,3 };
Arrays.stream(numbers).forEach((e) -> { System.out.println(e); });
输出
forEach和for-loop的区别
两者都是用来迭代集合中的元素,forEach使用内部迭代器,for-loop使用外部迭代器。内部迭代器是由java提供的内置迭代器,迭代逻辑不会被开发者处理外部迭代器是开发者必须编写代码来迭代集合中的元素。