lumbda常用操作

文章目录

lumbda的常用操作

将List转List

java 复制代码
 
 List<String> listString = Arrays.asList("1", "2");
        List<Integer> listInteger = listString.stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());

filter 过滤

java 复制代码
 List<String> listString = Arrays.asList("1", "2", "a");
        List<Integer> listInteger = listString.stream().filter(c -> {
            return StringUtils.isNumeric(c);
        }).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());

max 和min

java 复制代码
List<Integer> integerList = Arrays.asList(5, 2, 8);

        Integer max = integerList.stream().max((a, b) -> {
            return a > b ? 1 : -1;
        }).get();

        Integer min = integerList.stream().min((a, b) -> {
            return a > b ? 1 : -1;
        }).get();


        System.out.println(max);
        System.out.println(min);
        System.out.println("---------------------------");

        Integer min2 = integerList.stream().min(Comparator.comparing(Integer::intValue)).get();
        Integer max2 = integerList.stream().max(Comparator.comparing(Integer::intValue)).get();

        System.out.println(min2);
        System.out.println(max2);

将List转为Map

java 复制代码
        List<User> userList = new ArrayList<>();
        userList.add(new User("1", "xiaowang"));
        userList.add(new User("2", "xiaoming"));

        Map<String, String> map = userList.stream().collect(Collectors.toMap(User::getId,User::getUserName));
        map.forEach((k,v)->{
            System.out.println(k);
            System.out.println(v);
        });

        Map<String, User> map2 = userList.stream().collect(Collectors.toMap(a->{return a.getId();},b->{
            return b;
        }));
        map2.forEach((k,v)->{
            System.out.println(k);
            System.out.println(v.getUserName());
        });

        Map<String, User> map3 = userList.stream().collect(Collectors.toMap(User::getId,Function.identity()));
        map3.forEach((k,v)->{
            System.out.println(k);
            System.out.println(v.getUserName());
        });

将List转为Map(重复key)

如果List转Map时,存在key的重复,则会报错,提示重复的key(java.lang.IllegalStateException: Duplicate key)
此时需要定义处理key重复时的舍留,我们可以定义是保留前者还是后者。(k1,k2)->k1 表示保留前者,(k1,k2)->k2表示保留后者

,当然我们也可以使用前面的filter过滤掉重复。

java 复制代码
List<User> userList = new ArrayList<>();
        userList.add(new User("1", "xiaowang"));
        userList.add(new User("2", "xiaoming"));
        userList.add(new User("1", "xiaoli"));
        Map<String, User> map4 = userList.stream().collect(Collectors.toMap(User::getId,Function.identity(),(k1,k2)->{return k1;}));
        map4.forEach((k,v)->{
            System.out.println(k);
            System.out.println(v.getUserName());
        });

将List转为Map(指定Map类型)

有时候,我们希望得到其插入时的顺序,而不是无序的map,此时我们可以指定转换为LinkedHashMap

例如下图中,userList的顺序插入顺序是3,1,2,但是返回的顺序遍历结果是1,2,3,我们希望得到其原始顺序。
我们可以指定使用LinkedHashMap作为接收类型

java 复制代码
   List<User> userList = new ArrayList<>();
        userList.add(new User("3", "xiaohuang"));
        userList.add(new User("1", "xiaowang"));
        userList.add(new User("2", "xiaoming"));
        userList.add(new User("1", "xiaoli"));
        Map<String, User> map4 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (k1, k2) -> {
            return k1;
        }, LinkedHashMap::new));
        map4.forEach((k, v) -> {
            System.out.println(k);
            System.out.println(v.getUserName());
        });

执行结果可以看到,此时结果的顺序与原来List添加顺序一致

过滤List重复

示例为过滤userName重复

java 复制代码
 List<User> userList = new ArrayList<>();
        userList.add(new User("3", "xiaohuang"));
        userList.add(new User("1", "xiaowang"));
        userList.add(new User("2", "xiaoming"));
        userList.add(new User("1", "xiaoli"));
        userList.add(new User("4", "xiaoming"));
        ArrayList<User> list = userList
                .stream()
                .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getUserName))), ArrayList::new));

        list.forEach(c -> {
            System.out.println(c.getId() + "  " + c.getUserName());
        });

执行结果

相关推荐
您^_^1 小时前
DeepSeek-Harness 升级排障完全指南:三类本地残留逐个拆解
人工智能·windows·个人开发·deepseekharness·deepseekv4pro
MSTcheng.2 小时前
【Linux】Linux学习第三弹——Linux基本指令2
linux·windows·学习·ubuntu·操作系统
还是大剑师兰特4 小时前
Windows Redis 完整下载‑安装‑配置教程
windows·redis
水饺编程4 小时前
第5章,[Win32 章节] :练习程序,BigFontPic
c语言·c++·windows·visual studio
jyOverQ17 小时前
ChatGPT Windows 客户端点击无反应、有进程却没窗口?一次 MSIX 非系统盘启动卡死的完整排查
windows·chatgpt
还是大剑师兰特20 小时前
MySQL8.0 Windows完整安装教程
windows·mysql·大剑师
redfred1 天前
HandBrake 使用教程:开源视频压缩工具 视频太大压缩 MKV转MP4 批量转码 硬件加速 Windows/macOS/Linux
windows·开源·音视频
kakakahahahaha1 天前
【Windows】C盘拒绝访问0x80070005的7步排查
windows·电脑·内容运营·软件需求
万年咸鱼1 天前
Java ArrayList 详解:原理、用法与实战
java·开发语言·windows
奈斯先生Vector1 天前
本地图片识别怎么接入多模态 AI?用 Python API 理解 GPT-4o Vision 的真实工作流
开发语言·人工智能·windows·python·网络协议·http·aigc