java lambda表达式 遍历操作集合
来源:互联网 发布:应用单片机转速测量仪 编辑:程序博客网 时间:2024/05/14 21:25
经常需要遍历集合中的元素,做一些操作
假设有这样一个需求: 分别输出字符集合里对应字符,
public void print(List<Character> list){for(Character c : list){System.out.println(c);}}
需求变了: 输出字符集合里对应字符的的大写
<pre name="code" class="java">public void printUpper(List<Character> list){for(Character c : list){System.out.println((char)(c - 32));}}
还可能有很多其他操作,遍历是不变的,变化的是操作部分。可以把这些不变的部分写成模板,通过提供回调接口来分离变化的操作,比如:
public interface Action<T> {public void action(T t);}那么上面的需求的实现可以写成:
public void genericPrint(List<Character> list, Action<Character> action){for(Character c : list){action.action(c);}}
在具体调用的时候,只需要提供具体的实现就可以。比如输出大写的那个的需求 :
genericPrint(list, new Action<Character>() {@Overridepublic void action(Character c) {System.out.println((char)(c - 32));}});
jdk8 提供了对lambda表达式的支持,lambda表达式使得抽象函数行为有了更加方便的方法。
上面的例子在jdk8 中,可以简化为:
genericPrint(list, c -> System.out.println((char)(c - 32)));
这样更加符合逻辑,因为我们需要抽象的只是不同的函数行为。 在上面的例子中 c 为action方法的入参, system......为方法体,编译器做了类型推断,如果写全了应该为:
genericPrint(list, (Character c) -> {System.out.println((char)(c - 32));});
并且在jdk8的List中新增了forEach方法(由接口Iterable提供),所以在遍历list操作的时候,可以直接:
list.forEach(c ->System.out.println((char)(c - 32)));抽象函数行为在很多地方都有见到,比如创建线程,区别就在线程的行为,即run()方法上。现在创建线程可以:
new Thread(() -> {doSomething;});
以erlang为例:对于上面输出大写字符的需求:
lists:foreach(fun(C) ->io:format("~c",[C-32]) end, List).
0 0
- java lambda表达式 遍历操作集合
- 使用Lambda表达式遍历集合:
- 使用Lambda表达式遍历集合
- Java中的集合转换(lambda表达式)
- Lambda表达式和Java集合框架
- Lambda表达式和Java集合框架
- Lambda表达式和Java集合框架
- [转]Lambda表达式和Java集合框架
- Lambda表达式和Java集合框架
- 使用Lambda表达式遍历集合(forEach方法)
- lambda--list集合遍历
- 使用Lambda表达式遍历Iterator
- Java8集合中的Lambda表达式
- Java Lambda表达式入门
- Java 8 lambda表达式
- Java Lambda表达式入门
- java之Lambda表达式
- Java Lambda表达式例子
- Linux多线程服务器端编程:使用muduo C++网络库 读书笔记
- jquery简单效果--图片悬停提示
- poj - 1093 - Formatting Text(dp)
- 一款PHP环境整合工具—VertrigoServ介绍
- Ext.form.field.CheckBox和Ext.form.field.Radio主要配置项目
- java lambda表达式 遍历操作集合
- linux-2.6.30.4内核制作体验
- jni
- 【DP】最短路
- 一气呵成编完代码的感觉对不对
- Financial Management
- CentOS6.4下安装NS3下的NetAnim模块失败的问题解决
- 利用循环求和
- 异常