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

执行结果

相关推荐
开开心心就好13 分钟前
键盘改键工具免安装,自定义键位屏蔽误触
java·网络·windows·随机森林·计算机外设·电脑·excel
2601_949532841 小时前
Psello HTML Template: A Developer‘s Deep-Dive Review and Guide - Download Free
前端·windows·html·seo·wordpress·gpl
软件资深者2 小时前
USB存储设备管理工具 启用或者禁用+usb修复
windows·microsoft·计算机外设·系统修复
失眠的稻草人2592 小时前
【windows】注入--BHO机制
windows
XLYcmy3 小时前
一个用于统计文本文件行数的Python实用工具脚本
开发语言·数据结构·windows·python·开发工具·数据处理·源代码
程序员徐师兄3 小时前
Windows JDK17 下载安装教程,附详细图文
java·windows·jdk17 下载安装·java17 下载安装教程
80530单词突击赢3 小时前
C++STL list实现揭秘
windows
myjie05273 小时前
使用 windows ndk-stack 分析NDK crash
windows
小邓睡不饱耶4 小时前
使用Scala实现手机号码归属地查询系统
开发语言·windows·scala
0白露5 小时前
关闭搜狗输入法右下角广告,可以适用于大多数应用系统通知的广告
windows·bug