内容简介:Java forEach是一个对collection或者stream迭代以及对其中的每个元素执行某个动作的实用方法。下面的代码片段展示了在Iterable interface中java forEach方法的默认实现。这样可以使除了Map类之外的所有collection类使用它。该方法将会对每个迭代元素执行给定的动作,直到所有元素被处理完毕或者动作抛出了一个异常。
Java forEach是一个对collection或者stream迭代以及对其中的每个元素执行某个动作的实用方法。
1. Java 8 forEach 方法
下面的代码片段展示了在Iterable interface中java forEach方法的默认实现。这样可以使除了Map类之外的所有collection类使用它。
该方法将会对每个迭代元素执行给定的动作,直到所有元素被处理完毕或者动作抛出了一个异常。
action代表一个接受单个输入参数并且不返回任何值的操作。它是 Consumer
interface的一个实例。
// Iterable.java default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } } 复制代码
一个定制的action可以用如下的简单语法生成。在这里 Object
类型将会被collection或者stream里的元素类型替代。
Consumer<Object> action = new Consumer<Object>() { @Override public void accept(Object t) { //perform action } }; 复制代码
2. Java 8 stream forEach示例
在这个例子当中,我们将打印所有偶数。
// 在stream元素上执行的 Java 8 forEach ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5)); Consumer<Integer> action = System.out::println; numberList.stream().filter(n -> n%2 == 0).forEach( action ); 复制代码
程序输出:
2 4 复制代码
3. Java 8 forEach 使用List示例
这里的action仅仅只是将元素打印到控制台。
ArrayList<Integer> numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5)); Consumer<Integer> action = System.out::println; numberList.forEach(action); 复制代码
程序输出:
1 2 3 4 5 复制代码
4. Java 8 forEach 使用Map示例
我们也可以在map keys和values上迭代以及在所有元素上执行任何动作。
HashMap<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); map.put("C", 3); //1. Map entries Consumer<Map.Entry<String, Integer>> action = System.out::println; map.entrySet().forEach(action); //2. Map keys Consumer<String> actionOnKeys = System.out::println; map.keySet().forEach(actionOnKeys); //3. Map values Consumer<Integer> actionOnValues = System.out::println; map.values().forEach(actionOnValues); 复制代码
程序输出:
A=1 B=2 C=3 A B C 1 2 3 复制代码
5. 创建自定义的action
我们也能创建 自定义的action方法 来执行为每个collection中的元素自定义的逻辑。
HashMap<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); map.put("C", 3); Consumer<Map.Entry<String, Integer>> action = entry -> { System.out.println("Key is : " + entry.getKey()); System.out.println("Value is : " + entry.getValue()); }; map.entrySet().forEach(action); 复制代码
程序输出:
Key is : A Value is : 1 Key is : B Value is : 2 Key is : C Value is : 3 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- python2.7 threading RLock/Condition文档翻译 (RLock/Condition详解)
- 基于 Laravel、Lumen 框架集成百度翻译、有道翻译、Google 翻译扩展包
- 腾讯发布人工智能辅助翻译 致敬人工翻译
- golang调用baidu翻译api实现自动翻译
- 监管机器翻译质量?且看阿里如何搭建翻译质量评估模型
- 机器翻译新突破:谷歌实现完全基于attention的翻译架构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。