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

执行结果

相关推荐
love530love1 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
1024小神6 小时前
tauri项目在windows上的c盘没有权限写入文件
c语言·开发语言·windows
程序视点14 小时前
Window 10文件拷贝总是卡很久?快来试试这款小工具,榨干硬盘速度!
windows
wuk99815 小时前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
lzb_kkk16 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
Paper_Love1 天前
x86-64_windows交叉编译arm_linux程序
arm开发·windows
前端若水1 天前
通过 Windows 共享文件夹 + 手机访问(SMB协议)如何实现
windows·智能手机
超龄超能程序猿1 天前
dnSpy 使用教程
windows·microsoft
路来了2 天前
Python小工具之PDF合并
开发语言·windows·python
csdn_aspnet2 天前
在 Windows 上安装和运行 Apache Kafka
windows·kafka