Java8 lambda expression usage and Stream API

0x00. Front data


private List<People> peoples = null;

@BeforeEach void before () {
    peoples = new ArrayList<>();
    peoples.add(new People("K.O1", 21, new Date()));
    peoples.add(new People("K.O2", 22, new Date()));
    peoples.add(new People("K.O3", 23, new Date()));
    peoples.add(new People("K.O4", 24, new Date()));
    peoples.add(new People("K.O5", 25, new Date()));
    peoples.add(new People("K.O6", 26, new Date()));
}

0x01. Extract a column in the object

    /**
    * Extract 1 columns
    */
    @Test void whenExtractColumnSuccess () {
        //The first way to write
        List<Integer> ages1 = peoples.stream().map(people -> people.getAge()).collect(Collectors.toList());
        System.out.println("###println: args1----");
        ages1.forEach(System.out::println);

        //A simpler way of writing
        List<Integer> ages2 = peoples.stream().map(People::getAge).collect(Collectors.toList());
        System.out.println("###println: args2----");
        ages1.forEach(System.out::println);
    }
    ###println: args1----
    21
    22
    23
    24
    25
    26
    ###println: args2----
    21
    22
    23
    24
    25
    26

0x02. Filter the list of sets through the conditions in the field

    /**
     * As long as people over the age of 25
     */
    @Test void whenFilterAgeGT25Success () {
        List<People> peoples1 = peoples.stream().filter(x -> x.getAge() > 25).collect(Collectors.toList());
        peoples1.forEach(x -> System.out.println(x.toString()));
    }
    People{name='K.O6', age=26, birthday=Wed May 15 22:20:22 CST 2019}

0x03. Sum of object numerical column data in the list

    /**
     * Sum all ages
     */
    @Test void sumAllPeopleAgeSuccess () {
        Integer sum1 = peoples.stream().collect(Collectors.summingInt(People::getAge));
        System.out.println("###sum1: " + sum1);
        Integer sum2 = peoples.stream().mapToInt(People::getAge).sum();
        System.out.println("###sum2: " + sum2);
    }
    ###sum1: 141
    ###sum2: 141

0x04. Fetch the first element of the set that meets the conditions

    /**
     * Take out the 25-year-old
     */
    @Test void extractAgeEQ25Success () {
        Optional<People> optionalPeople =  peoples.stream().filter(x -> x.getAge() == 25).findFirst();
        if (optionalPeople.isPresent()) System.out.println("###name1: " + optionalPeople.get().getName());

        //Abbreviation
        peoples.stream().filter(x -> x.getAge() == 25).findFirst().ifPresent(x -> System.out.println("###name2: " + x.getName()));
    }
    ###name1: K.O5
    ###name2: K.O5

0x05. Splicing the object character columns in the set according to rules

    /**
     * Comma concatenate all names
     */
    @Test void printAllNameSuccess () {
        String names = peoples.stream().map(People::getName).collect(Collectors.joining(","));
        System.out.println(names);
    }
    K.O1,K.O2,K.O3,K.O4,K.O5,K.O6

0x06. Extract the set element and convert it to Map

    /**
     * map that converts a collection to (name, age)
     */
    @Test void list2MapSuccess () {
        Map<String, Integer> map1 = peoples.stream().collect(Collectors.toMap(People::getName, People::getAge));
        map1.forEach((k, v) -> System.out.println(k + ":" + v));

        System.out.println("--------");

        //(name object)
        Map<String, People> map2 = peoples.stream().collect(Collectors.toMap(People::getName, People::getThis));
        map2.forEach((k, v) -> System.out.println(k + ":" + v.toString()));
    }

    //The method of self realization in People
    public People getThis () {
        return this;
    }
    K.O2:22
    K.O3:23
    K.O1:21
    K.O6:26
    K.O4:24
    K.O5:25
    --------
    K.O2:People{name='K.O2', age=22, birthday=Wed May 15 22:42:39 CST 2019}
    K.O3:People{name='K.O3', age=23, birthday=Wed May 15 22:42:39 CST 2019}
    K.O1:People{name='K.O1', age=21, birthday=Wed May 15 22:42:39 CST 2019}
    K.O6:People{name='K.O6', age=26, birthday=Wed May 15 22:42:39 CST 2019}
    K.O4:People{name='K.O4', age=24, birthday=Wed May 15 22:42:39 CST 2019}
    K.O5:People{name='K.O5', age=25, birthday=Wed May 15 22:42:39 CST 2019}

0x07. Group by a set attribute

    /**
     * Group by first name
     */
    @Test void listGroupByNameSuccess() {
        //Add an element to see the effect easily
        peoples.add(new People("K.O1", 29, new Date()));
        Map<String, List<People>> map = peoples.stream().collect(Collectors.groupingBy(People::getName));

        map.forEach((k, v) -> System.out.println(k + ":" + v.size()));
    }
    K.O2:1
    K.O3:1
    K.O1:2
    K.O6:1
    K.O4:1
    K.O5:1

0x08. Average number of numerical columns of set object

    /**
     * Average age
     */
    @Test void averagingAgeSuccess () {
        Double avgAge = peoples.stream().collect(Collectors.averagingInt(People::getAge));
        System.out.println(avgAge);
    }
    23.5

0x09. Sort set by a column

    /**
     * Sort by age
     */
    @Test void sortByAgeSuccess () {
        System.out.println("###Before sorting -- ");
        peoples.forEach(x -> System.out.println(x.getAge()));

        peoples.sort((x, y) -> {
            if (x.getAge() > y.getAge()) {
                return 1;
            } else if (x.getAge() == y.getAge()) {
                return 0;
            }
            return -1;
        });

        System.out.println("###After sorting -- ");
        peoples.forEach(x -> System.out.println(x.getAge()));
    }
    ###Before sorting---
    21
    23
    24
    25
    22
    26
    ###After sorting---
    21
    22
    23
    24
    25
    26

To be continued

< source address: https://github.com/cos2a/learning-repo/tree/master/core-java8>

Tags: Java Attribute github

Posted on Sun, 10 Nov 2019 09:31:55 -0500 by grantf