JAVA8 Lambda表達式基礎使用

/**
 * JAVA8 Lambda表達式基礎使用
 * GitHub地址:https://github.com/hack-feng/algorithm
 * CSDN地址:https://blog.csdn.net/qq_34988304/article/details/100920460
 * 聯繫作者:[email protected]
 */
public class Lambda {
    @SuppressWarnings("OptionalGetWithoutIsPresent")
    public static void main(String[] args) throws InterruptedException {

        System.out.println("-----------------------1、Lambda的多線程寫法--------------------------");
        // 普通
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("非Lambda的多線程寫法");
            }
        }).start();

        // Lambda
        new Thread(() -> System.out.println("Lambda的多線程寫法")).start();

        Thread.sleep(100);

        System.out.println("-----------------------2、Lambda的for循環寫法--------------------------");
        List<String> forTestList = new ArrayList<>();
        forTestList.add("a");
        forTestList.add("b");
        forTestList.add("c");

        for (int i = 0; i < forTestList.size(); i++) {
            System.out.println("普通for循環" + forTestList.get(i));
        }

        for (String flag : forTestList) {
            System.out.println("forEach循環" + flag);
        }

        forTestList.forEach(list -> System.out.println("Lambda的寫法" + list));

        System.out.println("-----------------------3、Lambda集合常用的操作--------------------------");
        System.out.println("初始化數據:");
        List<User> userList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User(i, "姓名"+ i,  new Random().nextInt(5));
            System.out.println(user.toString());
            userList.add(user);
        }

        System.out.println("根據age分組--------------------------------------------------------");
        Map<Integer ,List<User>> groupMap = userList.stream().collect(Collectors.groupingBy(User::getAge));
        for(Map.Entry map : groupMap.entrySet()){
            System.out.println(map.getKey() + "    " + map.getValue());
        }

        System.out.println("根據age過濾--------------------------------------------------------");
        List<User> filerList = userList.stream().filter(list -> list.getAge() == 3).collect(Collectors.toList());
        filerList.forEach(list -> System.out.println("age爲3的數據有:" + list.toString()));

        System.out.println("根據age, id進行倒序排序----------------------------------------------------");
        userList.sort(Comparator.comparing(User::getAge).thenComparing(User::getId).reversed());
        userList.forEach(list -> System.out.println(list.toString()));

        System.out.println("list轉爲map---------------------------------------------------------------");
        Map<Integer, User> map = userList.stream().collect(Collectors.toMap(User :: getId, list -> list));
        map.forEach((k, v) -> System.out.println("id:" + k + "            value:" + v.toString()));

        System.out.println("打印map中value的值age爲3的id-----------------------------------------------");
        map.forEach((k, v) -> {
            if(v.getAge() == 3){
                System.out.println("age的值爲3的id是:" + k);
            }
        });

        System.out.println("取數據的最大值和最小值-------------------------------------------------------");
        Integer maxId = userList.stream().map(User::getId).max(Integer::compareTo).get();
        System.out.println("最大id值爲:" + maxId);
        Integer minId = userList.stream().map(User::getId).min(Integer::compareTo).get();
        System.out.println("最小id值爲:" + minId);
    }

    // 定義User類,用作測試使用
    static class User{
        private Integer id;
        private String name;
        private Integer age;

        User(Integer id, String name, Integer age){
            this.id = id;
            this.name = name;
            this.age = age;
        }
        Integer getId() {
            return id;
        }

        Integer getAge() {
            return age;
        }

        public String toString(){
            return "id="+this.id + ",name="+this.name+",age="+this.age;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章