在上一篇中我们知道了Lambda表达式和基本的应用,当然上篇主要只是基于Lambda表达式完成接口的实例化。也是日常用的最多的。
本篇我们就聊聊Lambda表达式操作集合的一些方式,其实主要是基于JAVA8的stream包和function包。
Lambda操作集合:Stream
Stream 操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,
而中间操作返回Stream本身,这样你就可以将多个操作依次串起来(链式编程)。
Stream 的创建需要指定一个数据源,比如 java.util.Collection的子类,List或者Set, Map不支持。
Stream的操作可以串行执行或者并行执行。Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。同时提供串行和并行两种模式进行汇聚操作。
语法格式:
(参数)-{语句块}
其中只有一个参数的化()可以省略
Lambda表达式可以实现的操作:
1、中间操作
包括但不局限于:map、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 unordered等
示例:
Lambda_Test{ ListInteger=ArrayList(); @Test test1(){ Collections.(,Integer[]{11,22,33,6,2,44}); .stream().map(n-n*2).forEach(System.::println); } @Test test2(){ Collections.(,Integer[]{11,22,33,6,2,44}); .stream().filter(n-n%2==0).forEach(System.::println); }
@Test test3(){ Collections.(,Integer[]{11,22,33,6,2,44}); .stream().sorted((n1,n2)-n2-n1).forEach(System.::println); }
}
2、最终操作
包括但不局限于:forEach、 toArray、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator等
代码如下:
@Test test4(){ Collections.(,Integer[]{11,22,33,6,2,44}); System..println(+.stream().min((n1,n2)-n1-n2).get()); System..println(+.stream().max((n1,n2)-n1-n2).get()); System..println(+.stream().count()); }
@Test test5(){ ListStringlist=ArrayList(); Collections.(list,String[]{,,,,}); System..println(list.stream().anyMatch(n-n.contains())); }
@Test test6(){ ListStringlist=ArrayList(); Collections.(list,String[]{,,,,}); System..println(list.stream().findFirst().get()); }