java-Stream流

lambda表达式

定义:不管是什么对象,lambda表达式主要关注的是对数据进行了什么操作。

基本格式
(参数列表)->{ 代码 }

1.是一个匿名类并且只有一个抽象接口。(笔记)

例子:
new Thread(new Runnable(){
@Override
public void run(){
system。outprintln("新线程中run 方法被执行了")
}
})

new Thread(() ->{ system。outprintln("新线程中run 方法被执行了") )

*********************************************************************************************************
Stream流 stream: 筛选 ,去重,转换,查询,遍历
@EqualsAndHashCode //用于后期的去重使用
创建流
1 单列集合:集合对象.stream()
2 数组: arrays.stream(arr) 或者 stream.of(arr)
3 双列集合:转成单列集合后再创建 map.entrySet.stream()
map<String,Integer> map = new HashMap)<>();
map.put("黑子"."17")
map.put("桃子"."17")
map.put("黑子"."17")
map.entrySet.stream()

中间流
.distinct //去重
.filter() //设置条件,满足条件就留下

.map //可以获取list中JavaBean的某个字段,转成一个新的list。(结果回去 string,int,bool...单个类型的list)

.flatmap 可以将一个流中的每个元素都转换成一个流,然后把这些流连成一个流,也就是说,它可以把一个流中的流元素“展平”成一个流

.limit (2) 设置流的最大长度,超出的部分将被抛弃
.skip(3) 跳过流中的前N个元素,返回剩下的元素

.sorted((p1, p2) -> p1.getAge().compareTo( p1.getAge()))).collect(Collectors.toList()) 升序
.sorted( new Comparator 方法) 1-3 解释:1到3 //排序
.sorted(Comparator.comparingInt(Person::getAge).reversed()) .collect(Collectors.toList()) 降序 (reversed()这个方法是降序)

.concat(list1,list2) //俩个list合并

终结流
.forEach 对流中的元素进行遍历进行具体操作
.collect(Collectors.toList) 把当前流转成 另一个集合

.count 获取流中的元素个数
.max( new Comparator) 最大值
.Min ( new Comparator) 最小值


例子
先按年龄排序,在按价格排序 (关键字:thenComparing)
.sorted(Comparator.comparingInt(Person::getAge)
.thenComparing(Comparator.comparingInt(Person::getPrice)))
.collect(Collectors.toList()) 降序 (reversed()这个方法是降序)

 

例子1
flatMap(T -> Stream)
将流中的每一个值转换成另一个流,再把每一个流连接成为一个流
List<String> list = new ArrayList<>();
list.add("aaa bbb ccc");
list.add("ddd eee fff");
list.add("ggg hhh iii");
list = list.stream().map(s -> s.split(" “)).flatMap(Arrays::stream).collect(toList());

 

例子1
.collect(Collectors.toMap) 把当前流转,另一个map
//获取一个map集合,map的key为作者名,value为List<Book>
List<Author>authors = getAuthors()

authors.stream
key value
.collect(Collectors.toMap(new Function<Autor,String>(){ return author.getName }, new Function<Autor,List<Book>>(){return author.getBooss} ))


例子2
map<String,Integer> map = new HashMap)<>();
map.put("黑子"."17")
map.put("桃子"."17")
map.put("黑子"."17")
map.entrySet.stream()
key value
.collect(Collectors.toMap(new Function<entrySet,String>(){ return entrySet.getKey }, new Function<entrySet,String >(){return entrySet.getValue} ))


笔记:
1.如果没有终结操作,没有中间操作是不会得到执行的
2,流是一次性的,一个终结操作后,这个流就不能再被使用了。

 

posted @ 2024-04-09 16:24  y_d_g  阅读(2)  评论(0编辑  收藏  举报