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

执行结果

相关推荐
sukalot21 分钟前
Windows 图形显示驱动开发-WDDM 2.4功能-基于 IOMMU 的 GPU 隔离(二)
windows·驱动开发
Tee xm1 小时前
清晰易懂的 Flutter 卸载和清理教程
linux·windows·flutter·macos
非凡ghost2 小时前
超级好用的小软件,连接电脑和手机。
windows·智能手机·电脑·软件需求
z26373056112 小时前
玩转JSONObject:使用方法详解与Map对比
windows
无名之逆3 小时前
探索轻量高性能的 Rust HTTP 服务器框架 —— Hyperlane
服务器·开发语言·windows·后端·http·rust
vortex53 小时前
Windows 权限配置文件解析与安全分析(GPP,GPO,LSA)
windows·安全·渗透测试
无名之逆4 小时前
Hyperlane:高性能 Rust HTTP 服务器框架评测
服务器·开发语言·windows·后端·http·rust
yuanpan5 小时前
如何将python项目打包成Windows环境的exe应用提供给客户使用
开发语言·windows·python
tadus_zeng1 天前
Windows C++ 排查死锁
c++·windows
EverestVIP1 天前
VS中动态库(外部库)导出与使用
开发语言·c++·windows