Stream流的Collect方法详解

本文介绍了如何使用JavaStreamAPI从列表中收集数据,分别以List和Set形式存储男性信息,并展示了如何将数据收集到Map中,强调了键值对处理和注意事项。
摘要由CSDN通过智能技术生成

一.按照要求将数据收集到集合当中

需求:收集男性的信息

1.使用collect(Collectors.toList())的方式将数据收集到List集合当中

2.使用collect(Collectors.toSet())的方式将数据收集到Set集合当中

那么收集到这两种不同的集合当中的区别是什么呢?

重新收集出来的数据分别为List的形式与Set的形式,也就是说它们分别包含了List集合和Set集合的特点,它们之间的区别就是List集合和Set集合的区别

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class stream {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "张无忌-男", "周芷若-女", "赵敏-女", "张三丰-男", "张翠山-男", "张良-男", "王二-男", "谢广坤-男");
        //收集到List集合当中
        List<String> collectedlist = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(collectedlist);

        //收集到Set集合当中
        Set<String> collectedset = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(collectedset);
    }
}

3.使用collect(Collectors.toMap())的方式将数据收集到map集合当中

注意点1:如果要把数据收集到Map集合当中,键不能重复,要符合Map集合的特点,否则会报错

注意点2:要把数据收集到Map集合当中时需要注意确定哪个数据作为键,哪个数据作为值来构成一个entries对象

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class stream {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "张无忌-男-18", "周芷若-女-19", "赵敏-女-20", "张三丰-男-21", "张翠山-男-22", "张良-男-23", "王二-男-24", "谢广坤-男-25");
        Map<String, Integer> collectedmap = list.stream().filter(s -> "男".equals(s.split("-")[1]))
                //Function当中的两个参数之中的前一个参数表示键的生成规则,后一个参数表示值的生成规则
                //Function当中的两个泛型之中的前一个泛型表示每一个数据的类型,后一个泛型表示Map集合中键/值的数据类型
                /*方法apply中的
                形参:依次表示流里面的每一个数据
                方法体:生成键/值的代码
                返回值:已经生成的键/值
                 */
                .collect(Collectors.toMap(new Function<String, String>() {
                                              @Override
                                              public String apply(String s) {
                                                  return s.split("-")[0];
                                              }
                                          },
                        new Function<String, Integer>() {
                            @Override
                            public Integer apply(String s) {
                                return Integer.parseInt(s.split("-")[2]);
                            }
                        }));
        System.out.println(collectedmap);

        //Lambda表达式
        /*
        Map<String, Integer> collectedmap = list.stream().filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toMap(
                        s -> s.split("-")[0],
                        s -> Integer.parseInt(s.split("-")[2])));
        System.out.println("collectedmap");                
         */
    }
}

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值