设为首页 加入收藏

TOP

java 1.8新特性 lambda表达式 - stream流操作(一)
2019-09-17 16:28:40 】 浏览:30
Tags:java 1.8 特性 lambda 表达式 stream 操作
1.8新特性 lambda表达式 资料: 1. Consumer接口 https://blog.csdn.net/qq_28410283/article/details/80618456
        2.java8 Lambda表达式简介 https://blog.csdn.net/qq_28410283/article/details/80961022
        3.菜鸟教程  Java 8 Lambda 表达式 https://www.runoob.com/java/java8-lambda-expressions.html
 Consumer 语义是消费的意思, public interface Consumer<T> { void accept(T t); //消费 //主要是对入参做一些列的操作,在stream里,主要是用于forEach;内部迭代的时候,对传入的参数,做一系列的业务操作,没有返回值;
            default Consumer<T> andThen(Consumer<? super T> after) //传入一个Consumer类型的参数,它的泛型类型, //跟本接口是一致的T,先做本接口的accept操作, //然后在做传入的Consumer类型的参数的accept操作
 Lambda 表达式的简单例子: 1. 不需要参数,返回值为 5 () -> 5  
        2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x 3. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y 4. 接收2个int型整数,返回他们的和 (int x, int y) -> x + y 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void) (String s) -> System.out.print(s) 使用 Lambda 表达式需要注意以下两点: Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。在上面例子中,我们使用各种类型的Lambda表达式来定义MathOperation接口的方法。然后我们定义了sayMessage的执行。 Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。 变量作用域 lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。 lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义) stream流操作 资料: 1.Java的Stream流式处理 https://blog.csdn.net/qq_20989105/article/details/81234175
        2.Java 8 Stream | 菜鸟教程   //实际使用教程
            https://www.runoob.com/java/java8-streams.html
简介: Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation), 或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。同时它提供串行 和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用fork/join并行方式来拆分任务和加速处理过程。通常编写并行代码很 难而且容易出错, 但使用Stream API无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。 顺序: | stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect| 生成流 集合接口有两个方法来生成流: stream() ? 为集合创建串行流。 parallelStream() ? 为集合创建并行流。 例: List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); forEach Random random = new Random(); random.ints().limit(10).forEach(System.out::println); map List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // 获取对应的平方数 List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList()); filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串: limit 方法用于获取指定数量的流。 以下代码片段使用 limit 方法打印出 10 条数据: sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序: Random random = new Random(); random.ints().limit(10).sorted().forEach(System.out::println); parallelStream 并行程序 流并行处理程序的代替方法。以下实例我们使用 parallelStream 来输出空字符串的数量 List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); // 获取空字符串的数量 int count = strings.parallelStream().filter(string -> string.isEmpty()).count(); Collectors Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串: List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filte
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Springboot源码分析之@Transactio.. 下一篇Struts2 Jsp 动态明细向后台传值

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目