【java8新特性之Lambda表达式运用】

简介: 【java8新特性之Lambda表达式运用】



一、list转map

在工作中我们经常会遇到list转map的操作。在java8新特性中Collectors.toMap就可以直接把list集合转换成一个map

1.代码如下(示例)

public class TestLambda {
    public static void main(String[] args) {
        List<User> userList= new ArrayList<>();
        userList.add(new User(1,"看似心软的神",18));
        userList.add(new User(2,"心软的神",19));
        userList.add(new User(2,"看似心软的神2",20));
        /**
         * 现在我们可以通过Collectors.toMap将list转换成map
         * (k1, k2) -> k1 这个表示当key值相同时取第一个
         */
        Map<Integer, User> map = userList.stream().collect(Collectors.toMap(User::getId, user -> user, (k1, k2) -> k1));
        for (User user : map.values()) {
            System.out.println(user);
        }
    }
}

//运行结果

id为2的两条数据只会取第一条数据,第二条数据将会被舍弃掉

二、list集合过滤

过滤集合中不符合条件的元素

1.代码如下(示例)

public class TestLambda {
    public static void main(String[] args) {
        List<User> userList= new ArrayList<>();
        userList.add(new User(1,"看似心软的神",18));
        userList.add(new User(2,"心软的神",19));
        userList.add(new User(2,"看似心软的神2",20));
        /**
         * 现在我们可以通过filter()将list集合中不符合条件的元素过滤掉
         * 过滤掉id小于等于1的数据
         */
        List<User> list = userList.stream().filter(v -> v.getId() > 1).collect(Collectors.toList());
        list.forEach(v-> System.out.println(v));
    }
}

//运行结果

三、list集合分组

将list集合中的元素进行分组

1.代码如下(示例)

public class TestLambda {
    public static void main(String[] args) {
        List<User> userList= new ArrayList<>();
        userList.add(new User(1,"看似心软的神",18));
        userList.add(new User(2,"心软的神",19));
        userList.add(new User(2,"看似心软的神2",20));
        /**
         * 现在我们可以通过Collectors.groupingBy将list集合中的元素进行分组
         * 现在我们通过id进行分组
         */
        Map<Integer, List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getId));
        for (List<User> value : map.values()) {
            System.out.println(value);
        }
    }
}

//运行结果

 

四、list集合排序

将list集合中的元素进行自定义规则排序

1.代码如下(示例)

public class TestLambda {
    public static void main(String[] args) {
        List<User> userList= new ArrayList<>();
        userList.add(new User(1,"看似心软的神",18));
        userList.add(new User(2,"心软的神",19));
        userList.add(new User(2,"看似心软的神2",20));
        /**
         * 现在我们可以通过Comparator将list集合中的元素进行自定义规则排序
         * 现在我们通过年龄进行排序
         */
        System.out.println("*****************正叙排列****************************");
        List<User> list = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
       list.forEach(v-> System.out.println(v));
        /**
         * 我们通过年龄进行倒叙排列,倒叙需要加上reversed
         */
        System.out.println("*****************倒叙排列****************************");
        List<User> list1 = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
        list1.forEach(v-> System.out.println(v));
    }
}

//运行结果

 

五、list集合count统计

将list集合中的元素使用count进行统计

1.代码如下(示例)

public class TestLambda {
    public static void main(String[] args) {
        List<User> userList= new ArrayList<>();
        userList.add(new User(1,"看似心软的神",18));
        userList.add(new User(2,"心软的神",19));
        userList.add(new User(2,"看似心软的神2",20));
        /**
         * 现在我们可以通过Count将list集合中的元素进行统计
         * 现在我们统计年龄大于18岁的数量,这里返回的是一个long类型
         */
        long count = userList.stream().filter(v -> v.getAge() > 18).count();
        System.out.println(count);
    }
}

//运行结果

 

五、list集合获取指定列数据并去重

获取list集合中的指定列的数据并去重


1.代码如下(示例)

public class TestLambda {
    public static void main(String[] args) {
        List<User> userList= new ArrayList<>();
        userList.add(new User(1,"看似心软的神",18));
        userList.add(new User(2,"心软的神",19));
        userList.add(new User(2,"看似心软的神",20));
        /**
         * 现在我们可以获取list集合中的指定列的数据
         *
         */
        System.out.println("*****去重之前的数据*****");
        List<String> collect = userList.stream().map(v -> v.getName()).collect(Collectors.toList());
        collect.forEach(v-> System.out.println(v));
        /**
         * 现在我们可以获取list集合中的指定列的数据使用distinct去重
         *
         */
        System.out.println("******去重之后的数据******");
        List<String> collect2 = userList.stream().map(v -> v.getName()).distinct().collect(Collectors.toList());
        collect2.forEach(v-> System.out.println(v));
    }
}

//运行结果

 


好,以上就是全部内容,能坚持看到这里,你一定很有收获,那么动一动拿offer的小手,点个赞再走吧,听说这么做的人2022年都交了好运!

相关文章
|
1天前
|
Java 开发者
Java一分钟之-Lambda表达式与函数式接口
【5月更文挑战第12天】Java 8引入的Lambda表达式简化了函数式编程,与函数式接口结合,实现了代码高效编写。本文介绍了Lambda的基本语法,如参数列表、箭头符号和函数体,并展示了如何使用Lambda实现`Runnable`接口。函数式接口仅有一个抽象方法,可与Lambda搭配使用。`@FunctionalInterface`注解用于确保接口具有单一抽象方法。文章还讨论了常见的问题和易错点,如非函数式接口、类型冲突以及Lambda表达式的局部变量可见性,并提供了避免这些问题的策略。通过理解Lambda和函数式接口,开发者能提高代码可读性和效率。
39 4
|
1天前
|
Java
探索Java世界的奇妙工具——运算符与表达式运算符
探索Java世界的奇妙工具——运算符与表达式运算符
7 0
|
1天前
|
Java
Java正则表达式去掉非汉字字符
【5月更文挑战第11天】Java正则表达式去掉非汉字字符
15 3
|
1天前
|
Java API 开发者
Java中Lambda表达式的深入理解与应用
【5月更文挑战第12天】在Java 8之后,Lambda表达式已经成为了Java开发者必备的技能之一。Lambda表达式以其简洁、灵活的特点,大大提高了编程的效率。本文将深入探讨Lambda表达式的基本概念,语法规则,以及在实际开发中的应用,帮助读者更好地理解和使用Lambda表达式。
|
1天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
41 2
|
1天前
|
算法 安全 Java
Java表达式和规则引擎的比较与考量
Java表达式和规则引擎的比较与考量
10 0
|
1天前
|
Java
【JAVA进阶篇教学】第二篇:JDK8中Lambda表达式
【JAVA进阶篇教学】第二篇:JDK8中Lambda表达式
|
1天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
13 0
|
1天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式和Stream API
【2月更文挑战第18天】随着Java 8的发布,Lambda表达式和Stream API成为了Java开发者的新宠。本文将详细介绍Lambda表达式的基本语法、使用方法以及与Stream API的结合,帮助读者更好地理解和运用这些新特性,提高代码的简洁性和可读性。
|
1天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【2月更文挑战第21天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是Java 8中引入的一种新的编程语法,它允许我们将函数作为参数传递给方法,从而使代码更加简洁、易读。Stream API是一种用于处理集合的新API,它提供了一种高效且易于使用的处理数据的方式。本文将通过实例讲解这两个特性的基本用法以及它们如何帮助我们编写更简洁、高效的Java代码。