java lambda表达式 遍历操作集合
2014-10-22 20:27
495 查看
经常需要遍历集合中的元素,做一些操作
假设有这样一个需求: 分别输出字符集合里对应字符,
还可能有很多其他操作,遍历是不变的,变化的是操作部分。可以把这些不变的部分写成模板,通过提供回调接口来分离变化的操作,比如:
在具体调用的时候,只需要提供具体的实现就可以。比如输出大写的那个的需求 :
jdk8 提供了对lambda表达式的支持,lambda表达式使得抽象函数行为有了更加方便的方法。
上面的例子在jdk8 中,可以简化为:
这样更加符合逻辑,因为我们需要抽象的只是不同的函数行为。 在上面的例子中 c 为action方法的入参, system......为方法体,编译器做了类型推断,如果写全了应该为:
并且在jdk8的List中新增了forEach方法(由接口Iterable提供),所以在遍历list操作的时候,可以直接:
抽象函数行为在很多地方都有见到,比如创建线程,区别就在线程的行为,即run()方法上。现在创建线程可以:
by the way : lambda表达式不是java语言独创(也不是c#),在函数式语言中lambda表达式是司空见惯的,并且使用的更加优雅与自然, 比如高阶函数。
以erlang为例:对于上面输出大写字符的需求:
假设有这样一个需求: 分别输出字符集合里对应字符,
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>() { @Override public 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;});
by the way : lambda表达式不是java语言独创(也不是c#),在函数式语言中lambda表达式是司空见惯的,并且使用的更加优雅与自然, 比如高阶函数。
以erlang为例:对于上面输出大写字符的需求:
lists:foreach(fun(C) ->io:format("~c",[C-32]) end, List).
相关文章推荐
- Java1.8新特性关于lambda表达式与Stream流的使用以及对集合的实用操作
- Java8 Lambda表达式和流操作如何让你的代码变慢5倍
- 使用Lambda表达式遍历集合:
- Java 8 Lambda 表达式及 Stream 在集合中的用法
- Java_SE02-04-正则表达式,包装类,日期操作,泛型,集合框架
- JDK 8 新特性学习(二) Lambda表达式、集合流之操作
- java8 lambda表达式在集合中的应用
- Java8新特性 1——利用流和Lambda操作集合
- java8-lambda操作数组、集合
- 在Java 8中对stream带有lambda表达式的操作进行调试
- Java_集合操作_不同的列表选择不同的遍历方法
- 使用Lambda表达式遍历集合
- Java Lambda表达式之从集合到流
- JAVA 8 StreamAPI 和 lambda表达式 总结(四)--stream的一些聚合操作
- Java集合迭代器之fail-fast机制: 关于java集合的遍历以及ConcurrentModificationException(并发操作异常)
- JAVA 8 StreamAPI 和 lambda表达式 总结(二)--Stream基本操作
- Java8 lambda遍历集合及BeanUtils.copyProperties()方法小试
- Java8 Lambda表达式和流操作如何让你的代码变慢5倍
- Java8 Lambda表达式和流操作如何让你的代码变慢5倍
- 关于java集合的遍历以及ConcurrentModificationException(并发操作异常)