Lambda 表达式应用

java中对集合的遍历可以分为三种:(1)for 遍历 (2)foreach遍历 (3)iterator 遍历      例如:

     List<User> userList = new ArrayList<>();
        userList.add(new User(1, "鲁班", 7));
        userList.add(new User(2, "公孙离", 8));
        userList.add(new User(3, "马可波罗", 9));
        userList.add(new User(4, "百里守约", 10));
        userList.add(new User(5, "上官婉儿", 10));

        for (int i = 0; i < userList.size(); i++) {
            System.out.println("for循环遍历输出: " + userList.get(i));
        }
        for (User user : userList) {
            System.out.println("foreach遍历输出: " + user);
        }
        for (Iterator it = userList.iterator(); it.hasNext(); ) {
            System.out.println("iterator遍历输出: " + it.next());
        }

利用java8 中的lambda 表达式可以快速实现对集合的整合处理:
1:遍历输出userlist :

userList.forEach(user -> {
            System.out.println("lambda forEach输出: " + user);
        });

2:获取userList 中用户年龄的列表ageList

List<Integer> ageList = userList.stream().map(User::getAge).collect(Collectors.toList());

3:对ageList 去重 distinct

 List<Integer> ageList1 = ageList.stream().distinct().collect(Collectors.toList());

4: 根据条件过滤列表

 List<User> userListFilter = userList.stream().filter(user -> !user.getName().equals("鲁班")).collect(Collectors.toList());

5:求和sum

 int totalAge = userList.stream().mapToInt(User::getAge).sum();

6:正排序

List<User> sortUsers = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());

7:逆排序

List<User> sortUsers1 = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());

8:对象列表去重

List<User> userList1 = userList.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(User::getAge))), ArrayList::new));

9:两个List 对象过滤

List<User> userList2 = userList.stream()
                .filter(user -> userList1.stream().noneMatch(user1 -> Objects.equals(user.getId(), user1.getId())))
                .collect(Collectors.toList());

 10:List 对象转map

Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getAge, user -> user, (k1, k2) -> k2));

11:List对象分组

Map<Integer, List<User>> mapByAge = userList.stream().collect(Collectors.groupingBy(User::getAge));

 

 

源码测试内容:

@Data
@AllArgsConstructor
public class User {

    private int id;
    private String name;
    private int age;
}

 

import java.util.*;
import java.util.stream.Collectors;

import static java.util.Comparator.comparingLong;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;

/**
 * @author wanglong
 * @since 2021/3/28 12:58
 */
public class LambdaDemo {


    public static void main(String[] args) {
        /*List<User> userList = new ArrayList<User>() {
            {
                add(new User(1, "鲁班", 7));
                add(new User(2, "公孙离", 8));
                add(new User(3, "马可波罗", 9));
                add(new User(4, "百里守约", 10));
            }
        };*/
        List<User> userList = new ArrayList<>();
        userList.add(new User(1, "鲁班", 7));
        userList.add(new User(2, "公孙离", 8));
        userList.add(new User(3, "马可波罗", 9));
        userList.add(new User(4, "百里守约", 10));
        userList.add(new User(5, "上官婉儿", 10));

        for (int i = 0; i < userList.size(); i++) {
            System.out.println("for循环遍历输出: " + userList.get(i));
        }
        for (User user : userList) {
            System.out.println("foreach遍历输出: " + user);
        }
        for (Iterator it = userList.iterator(); it.hasNext(); ) {
            System.out.println("iterator遍历输出: " + it.next());
        }

        userList.forEach(user -> {
            System.out.println("lambda forEach输出: " + user);
        });

        //输出 ageList
        List<Integer> ageList = userList.stream().map(User::getAge).collect(Collectors.toList());
        System.out.println("ageList: " + ageList);

        //过滤ageList distinct
        List<Integer> ageList1 = ageList.stream().distinct().collect(Collectors.toList());
        System.out.println("ageList1: " + ageList1);

        //filter 过滤列表
        List<User> userListFilter = userList.stream().filter(user -> !user.getName().equals("鲁班")).collect(Collectors.toList());
        System.out.println("userListFilter: " + userListFilter);

        //求和 sum
        int totalAge = userList.stream().mapToInt(User::getAge).sum();
        System.out.println("年龄总和:" + totalAge);

        //正排序
        List<User> sortUsers = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
        System.out.println("按年龄正排序:" + sortUsers);

        //逆排序
        List<User> sortUsers1 = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
        System.out.println("按年龄逆排序:" + sortUsers1);

        //list 对象去重
        List<User> userList1 = userList.stream()
                .collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(User::getAge))), ArrayList::new));
        System.out.println("list对象去重: " + userList1);

        //list对象过滤
        List<User> userList2 = userList.stream()
                .filter(user -> userList1.stream().noneMatch(user1 -> Objects.equals(user.getId(), user1.getId())))
                .collect(Collectors.toList());
        System.out.println("list 对象过滤:" + userList2);
       Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getAge, user -> user, (k1, k2) -> k2));
System.out.println("List对象转map" + userMap);

    Map<Integer, List<User>> mapByAge = userList.stream().collect(Collectors.groupingBy(User::getAge));
    System.out.println("List对象分组" + mapByAge);
} }

 

posted @ 2021-03-28 14:45  山阴路的秋天  阅读(87)  评论(0编辑  收藏  举报