java stream流

stream流的本质:

将list,map转换成stream,然后进行一番操作(filter,forEach,collect等等)

例如:

        List<String> list = new ArrayList<String>(){{add("1");add("2");add("3");add("4");add("5");}};
        List<String> list2 = new ArrayList<>();
        list.stream().filter(o->o.equals("2")||o.equals("3")||o.equals("4")).forEach(o->list2.add(o));

第3行可以拆成两部分,list.stream().filter(o->o.equals("2")||o.equals("3")||o.equals("4"))stream.forEach(o->list2.add(o))

 list.stream().filter()会得到一个stream,这个stream是筛选出来的结果。可以用这个stream进行forEach(),将里面的结果给到其他的list,map,对象等,也可以collect(Collectors.toList())生成ArrayList。

但本质上就是拿到一个stream,再对他进行操作。

并行流

jdk8 stream与parallelStream实现源码阅读_benet-xiao的博客-CSDN博客_java parallelstream 源码

Optional的orElse等用法

Optional.ofNullable(value).orElse(default);

        String[] items = {"增","删","改"};
        Stream<String> s = Arrays.stream(items).filter(o -> o.equals("增1"));
        Optional<String> first = s.findFirst();
        String result = first.orElse("没有值");

list.stream().filter(o -> o.equals("增1")).findFirst().orElse(defaultValue);

关于optional的orElse和orElseGet、orElseThrow - 简书

Collectors.toMap

Map<Long, SonRoot> map= fatherlist.stream().collect(Collectors.toMap(FatherRoot::getCode, info -> info, (k1, k2) -> k1));

Java8 中 List 转 Map(Collectors.toMap) 使用技巧 | 张振伟的博客

map用法 元素类型转换

//需求:入参是逗号隔开的usercode,实体类中是long类型的list,在@Mapper字段映射前,需要对usercode处理,转换成List<Long>
String usercode = "111,222,333";
String[] users = str.split(",");
List<Long> collect = Arrays.stream(users).map(o -> Long.valueOf(o)).collect(Collectors.toList());

list转map操作

Collectors.toMap(),重复的key,如何取其中1个,或者拼接,或者装list 

案例:字典关联表,src_id,src_val,dest_id,dest_val

以src_id和dest_id为key,将一个装有多个map(一个map装了一行src_id,src_val,dest_id,dest_val)的list转成key(src_id,dest_id)=val(list[{src_id,src_val,dest_id,dest_val},{src_id,src_val,dest_id,dest_val}]),

list.stream().collect(Collectors.toMap(o->o.get("s_id")+"|"+o.get("d_id"), o -> o))

如果用toMap(),则会出现dublicate key报错,因为关联表大多是这样的:

src_id        src_val        dest_id        dest_val        update_time

SUBSYS_UF    00    SUBSYS_UFX    5    2021-08-26 11:12:04
SUBSYS_UF    01    SUBSYS_UFX    1    2021-08-26 11:12:04
SUBSYS_UF    02    SUBSYS_UFX    12    2021-08-26 11:12:04
SUBSYS_UF    03    SUBSYS_UFX    3    2021-08-26 11:12:04 

两个id一样,会出现多个。这时候需要用groupingBy

Map<Long, List<User>> map = users.stream().collect(Collectors.groupingBy(User::getId));

Java 8 :List 转 Map 之 Collectors.toMap()_小白一个-CSDN博客_collector.tomap

去重

分享几种 Java8 中通过 Stream 对列表进行去重的方法 - 知乎

list.stream().map().collect()

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());

 list.stream().map().collect()_freedom-CSDN博客_list.steam().map

Java 8 Stream | 菜鸟教程

Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合_云深i不知处的博客-CSDN博客_java stream 聚合 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

globalcoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值