湖南铁军工程建设有限公司官方网站,北京广告公司名录,速卖通开店流程及费用,成全视频免费观看在线看收索Java 8中引入的新特性#xff0c;stream流通过与Lambda表达式结合#xff0c;采用函数式编程#xff0c;简化数组、集合操作#xff0c;提高效率。
我们操作一个集合#xff0c;就把他看作一个流#xff0c;整个流依次执行#xff0c;#xff08;可以类比为一个管道stream流通过与Lambda表达式结合采用函数式编程简化数组、集合操作提高效率。
我们操作一个集合就把他看作一个流整个流依次执行可以类比为一个管道
开始管道
中间管道
终止管道 实例
先创建一个User类 package One_Thirty;public class User {private int id;private String name;private String sex;private int score;public User(){}public User(int id, String name, String sex, int score){this.id id;this.name name;this.sex sex;this.score score;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex sex;}public int getScore() {return score;}public void setScore(int score) {this.score score;}Overridepublic String toString() {return User{ id id , name name \ , sex sex \ , score score };}
}测试类
package One_Thirty;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {ListUser list new ArrayList();list.add(new User(1,榛果,男,100));list.add(new User(2,张三,男,90));list.add(new User(3,大倩,女,80));list.add(new User(4,大力,男,40));list.add(new User(5,刻晴,女,60));list.add(new User(6,松本,男,50));//filter()方法用于过滤collect()方法用于将过滤后得到的流转换为List集合ListUser collect list.stream().filter(user - user.getScore() 60).collect(Collectors.toList());//遍历collect.forEach(System.out::println);//也可以将两个合并list.stream().filter(user - user.getScore() 60).forEach(user - System.out.println(user));//filter的contains方法包含.count()获取数量 输出结果 2 //distinct()去重long count list.stream().filter(user - user.getName().contains(大)).count();System.out.println(count);// map函数的作用就是针对管道流中的每一个数据元素进行转换操作ListUser collect1 list.stream().map(user - {user.setId(user.getId() 10);return user;}).collect(Collectors.toList());collect1.forEach(System.out::println);//由于map的参数e就是返回值所以可以用peek函数。// peek函数是一种特殊的map函数当函数没有返回值或者参数就是返回值的时候可以使用peek函数。list.stream().peek(user - {user.setScore(user.getScore()1);}).forEach(user - System.out.println(user));}}flatMap map可以对管道流中的数据进行转换操作但是如果管道中还有管道无法处理。例如将“hello”“world”两个字符串组成的集合元素的每一个字母打印出来。如果不用Stream常规方法写2层for循环,第一层遍历字符串并且将字符串拆分成char数组第二层for循环遍历char数组。而如果用map的话它只能针对一维数组进行操作数组里面还有数组管道里面还有管道它是处理不了每一个元素的。此时用flatMap
ListString words Arrays.asList(hello, word);words.stream().flatMap(w - Arrays.stream(w.split())) // [h,e,l,l,o,w,o,r,l,d].forEach(System.out::println);