lumbda常用操作

news2024/11/23 7:21:09

文章目录

  • lumbda的常用操作
    • 将List<String>转List<Integer>
    • filter 过滤
    • max 和min
    • 将List<Object>转为Map
    • 将List<Object>转为Map(重复key)
    • 将List<Object>转为Map(指定Map类型)
    • 过滤List重复

lumbda的常用操作

将List转List

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

filter 过滤

 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

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

        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过滤掉重复。

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作为接收类型

   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重复

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

执行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【强化学习的数学原理】课程笔记--2(贝尔曼最优公式,值迭代与策略迭代)

目录 贝尔曼最优公式最优 Policy求解贝尔曼最优公式求解最大 State Value v ∗ v^* v∗根据 v ∗ v^* v∗ 求解贪婪形式的最佳 Policy π ∗ \pi^* π∗一些证明过程 一些影响 π ∗ \pi^* π∗ 的因素如何让 π ∗ \pi^* π∗ 不 “绕弯路” γ \gamma γ 的影响reward 的…

15- 22题聚合函数 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例子2.15 - 有趣的电影2.16 - 平均售价2.17 - 项目员工 I2.18 - 各赛事的用户注册率2.19 - 查询结果的质量和占比2.20 - 每月交易 I2.21 - 即时食物配送 II2.22 - 游戏玩法分析 IV 1. 相关知识点 函数 函数含义order by排序group by分组between 小值 an…

基于web的产品管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于web的产品管理系统,java项目。 ecli…

2024最新boss直聘岗位数据爬虫,并进行可视化分析

前言 近年来,随着互联网的发展和就业市场的变化,数据科学与爬虫技术在招聘信息分析中的应用变得越来越重要。通过对招聘信息的爬取和可视化分析,我们可以更好地了解当前的就业市场动态、职位需求和薪资水平,从而为求职者和招聘企业提供有价值的数据支持。本文将介绍如何使…

Chrome浏览器web调试(js调试、css调试、篡改前置)

目录 1. 打开开发者工具(Dev Tool) 2. 打开命令菜单 截图 3. 面板介绍 4. CSS调试 右键检查快速到达元素处 查找DOM数 利用面板Console查找DOM节点 内置函数查找上一个选择点击的元素 5. 调试JS代码(Javascript调试) 日志调试 选择查看日志等级 眼睛观测变量 …

关于Unity运行时动态修改材质的小秘密

一、问题背景 在以往的Unity项目中涉及到修改材质的需求时&#xff0c;也只是改改材质贴图&#xff0c;材质颜色等&#xff0c;也没遇到那么多动态修改材质的坑。最近在做Unity App Demo时也遇到了要修改材质的小需求&#xff0c;本以为几分钟就能完成了&#xff0c;却花费了我…

【FPGA项目】System Generator算法板级验证-快速搭建外围测试电路

&#x1f389;欢迎来到FPGA专栏~System Generator算法板级验证-快速搭建外围测试电路 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文…

深入解析MySQL语句的执行步骤

目录 MySQL架构概述语句执行步骤总览连接管理与线程处理语法解析查询缓存语义解析与预处理查询优化执行计划生成存储引擎层执行结果集返回优化查询性能的技巧结论 MySQL架构概述 在深入探讨MySQL语句执行的具体步骤之前&#xff0c;我们先来了解MySQL的整体架构。MySQL架构主…

简单多状态DP问题

这里写目录标题 什么是多状态DP解决多状态DP问题应该怎么做&#xff1f;关于多状态DP问题的几道题1.按摩师2.打家劫舍Ⅱ3.删除并获得点数4.粉刷房子5.买卖股票的最佳时期含手冷冻期 总结 什么是多状态DP 多状态动态规划&#xff08;Multi-State Dynamic Programming, Multi-St…

Chapter8 透明效果——Shader入门精要学习笔记

一、基本概念 在Unity中通常使用两种方法来实现透明效果 透明度测试&#xff08;无法达到真正的半透明效果&#xff09;透明度混合&#xff08;关闭了深度写入&#xff09; 透明度测试 基本原理&#xff1a;设置一个阈值&#xff0c;只要片元的透明度小于阈值&#xff0c;就…

pandas数据分析(2)

列 执行df.columns获取DataFrame列信息&#xff1a; 如果在构造DataFrame时没有提供列名&#xff0c;那么pandas会用 从0开始的数字为列编号。我们也可以为列命名&#xff0c;和为索引命名类似&#xff1a; 同样也可以重命名列名&#xff1a; 使用df.drop删除列&#xff1a; 删…

Apple - Text Layout Programming Guide

本文翻译整理自&#xff1a;Text Layout Programming Guide&#xff08;更新日期&#xff1a;2014-02-11 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextLayout/TextLayout.html#//apple_ref/doc/uid/10000158i 文章目录 一、文本布局编程指…

小米集团25届校招留学生面试经验汇总及入职测评笔试题型分析

一、小米校招24年春招智能驾驶产品管理面试经验分享 ​ - **自我介绍**&#xff1a;准备一个精炼的自我介绍&#xff0c;突出自己的优势和适合岗位的特点。 - **项目经验**&#xff1a;详细回顾你在实习或项目中的具体角色和贡献&#xff0c;准备用成果和数据支撑。 - **行业…

【成都活动邀请函】7月6 | PowerData 数字经济-“成都“开源行!

【成都活动邀请函】7月6 | PowerData 数字经济-"成都"开源行&#xff01; 活动介绍活动信息线上直播扫码报名往期活动回顾专注数据开源&#xff0c;推动大数据发展 活动介绍 九天开出一成都&#xff0c;万户千门入画图。 自古以来&#xff0c;成都便是国家发展的重要…

为什么在重写equals方法后还要再重写hashcode方法(面试题)

接着上篇文章说到&#xff08;上篇文章地址&#xff1a;http://t.csdnimg.cn/udpsThttp://t.csdnimg.cn/udpsT&#xff09;我们在代码中发现重写了equals方法后还需要重写hashcode方法&#xff0c;为什么呢&#xff1f; 对于set这种数据类型&#xff0c;里面的值是不允许有重复…

【游戏引擎之路】登神长阶(五)

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-6月30日&#xff1a;攻克《Windows游戏编程大师技巧》。 …

【WPF】Windows系统桌面应用程序编程开发新手入门-打造自己的小工具

电脑Windows系统上的桌面程序通常是用Visual Studio 开发工具编写出来的&#xff0c;有两种开发方式供选择&#xff0c;一种是WindowForm&#xff0c;简称WinForm&#xff0c;另一种是Windows Presentation Foundation&#xff0c;简称WPF&#xff0c;这里将学习WPF项目。 文章…

安全不“放假”!暑期安全老师就用秒报小程序提示学生的安全

随着暑假的到来&#xff0c;孩子们如同出笼的小鸟&#xff0c;迫不及待地投入到广阔天地的怀抱。然而&#xff0c;作为老师&#xff0c;我深知这段时间虽然孩子们得到了放松和游玩的机会&#xff0c;但安全问题却不容忽视。如何让孩子们在享受假期的同时&#xff0c;又能确保他…

SpringBoot(一)创建一个简单的SpringBoot工程

Spring框架常用注解简单介绍 SpringMVC常用注解简单介绍 SpringBoot&#xff08;一&#xff09;创建一个简单的SpringBoot工程 SpringBoot&#xff08;二&#xff09;SpringBoot多环境配置 SpringBoot&#xff08;三&#xff09;SpringBoot整合MyBatis SpringBoot&#xff08;四…

FairGuard游戏加固无缝兼容 Android 15 预览版

2024年6月25日&#xff0c;谷歌发布了 Android 15 Beta 3 &#xff0c;作为Android 15 “平台稳定性”的里程碑版本&#xff0c;谷歌建议所有应用、游戏、SDK、库和游戏引擎开发者都将“平台稳定性”里程碑版本作为规划最终兼容性测试和公开发布的目标。 安卓开发者博客提供的版…