關於lambda表達式一些用法

直接給個例子吧,複製過去就能運行看效果的

package com.rogrand.highsunproperty.test.lambda;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.function.Consumer;
import java.util.function.Predicate;

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

public class Person {
    private String firstName, lastName, job, gender;

    private int salary, age;

    public Person(String firstName, String lastName, String job,
                  String gender, int age, int salary) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.gender = gender;
        this.age = age;
        this.job = job;
        this.salary = salary;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) {
        List<Person> javaProgrammers = getJavaPersons();
        List<Person> phpProgrammers = getPhpPersons();
        System.out.println("*********所有程序員的姓名****:");
        javaProgrammers.forEach(p -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
        phpProgrammers.forEach(p -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

        System.out.println("給程序員加薪 5% :");
        Consumer<Person> giveRaise = e -> e.setSalary(e.getSalary() / 100 * 5 + e.getSalary());
        javaProgrammers.forEach(giveRaise);
        phpProgrammers.forEach(giveRaise);

        System.out.println("下面是月薪超過 $1,400 的PHP程序員:");
        phpProgrammers.stream()
                .filter((p) -> (p.getSalary() > 1400))
                .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

        // 定義 filters
        Predicate<Person> ageFilter = (p) -> (p.getAge() > 25);
        Predicate<Person> salaryFilter = (p) -> (p.getSalary() > 1400);
        Predicate<Person> genderFilter = (p) -> ("female".equals(p.getGender()));

        System.out.println("下面是年齡大於 24歲且月薪在$1,400以上的女PHP程序員:");
        phpProgrammers.stream()
                .filter(ageFilter)
                .filter(salaryFilter)
                .filter(genderFilter)
                .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

        System.out.println("最前面的3個女性 Java programmers:");
        javaProgrammers.stream().filter(genderFilter).limit(3).forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

        System.out.println("根據 name 排序,並顯示前5個 Java programmers:");
        List<Person> sortedJavaProgrammers = javaProgrammers.stream().sorted((p, p2) -> (p.getFirstName().compareTo(p2.getFirstName())))
                .limit(5).collect(toList());
        sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s; %n", p.getFirstName(), p.getLastName()));

        System.out.println("獲取java程序員所有的年齡(去掉重複的):");
        Set<Integer> collect = javaProgrammers.stream().map(Person::getAge).collect(toSet());//降年齡裝換成set集合,如果不需要去重可以使用List
        collect.stream().sorted().forEach(info -> System.out.printf("%s; ", info));//升序
        collect.stream().sorted((p, p2) -> (p2 - p)).forEach(info -> System.out.printf("%s; ", info));//降序

        System.out.println("工資最低的 Java programmer:");
        Person pers = javaProgrammers.stream().min((p1, p2) -> (p1.getSalary() - p2.getSalary())).get();
        System.out.printf("Name: %s %s; Salary: $%,d.", pers.getFirstName(), pers.getLastName(), pers.getSalary());
        System.out.println();
        System.out.println("工資最高的 Java programmer:");
        Person person = javaProgrammers.stream().max((p, p2) -> (p.getSalary() - p2.getSalary())).get();
        System.out.printf("Name: %s %s; Salary: $%,d.", person.getFirstName(), person.getLastName(), person.getSalary());
        System.out.println();
        System.out.print("將 PHP programmers 的 first name 拼接成字符串:");
        String phpDevelopers = phpProgrammers.stream().map(Person::getFirstName).collect(joining(" ; ")); // 在進一步的操作中可以作爲標記(token)
        System.out.println(phpDevelopers);

        System.out.print("將 Java programmers 的 first name 存放到 Set:");
        Set<String> javaDevFirstName = javaProgrammers.stream().map(Person::getFirstName).collect(toSet());
        javaDevFirstName.forEach(s -> System.out.println(s));
        System.out.println("將 Java programmers 的 first name 存放到 TreeSet:");
        TreeSet<String> javaDevLastName = javaProgrammers.stream().map(Person::getLastName).collect(toCollection(TreeSet::new));
        javaDevLastName.forEach(s -> System.out.println(s));
    }

    private static List<Person> getPhpPersons() {
        List<Person> phpProgrammers = new ArrayList<>();
        phpProgrammers.add(new Person("Jarrod", "Pace", "PHP programmer", "male", 34, 1550));
        phpProgrammers.add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));
        phpProgrammers.add(new Person("Victor", "Channing", "PHP programmer", "male", 32, 1600));
        phpProgrammers.add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21, 1000));
        phpProgrammers.add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));
        phpProgrammers.add(new Person("Rosalind", "Layla", "PHP programmer", "female", 25, 1300));
        phpProgrammers.add(new Person("Fraser", "Hewie", "PHP programmer", "male", 36, 1100));
        phpProgrammers.add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));
        phpProgrammers.add(new Person("Alvin", "Lance", "PHP programmer", "male", 38, 1600));
        phpProgrammers.add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));
        return phpProgrammers;
    }

    private static List<Person> getJavaPersons() {
        List<Person> javaProgrammers = new ArrayList<>();
        javaProgrammers.add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 23, 2000));
        javaProgrammers.add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));
        javaProgrammers.add(new Person("Floyd", "Donny", "Java programmer", "male", 23, 1800));
        javaProgrammers.add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
        javaProgrammers.add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));
        javaProgrammers.add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));
        javaProgrammers.add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));
        javaProgrammers.add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));
        javaProgrammers.add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
        javaProgrammers.add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
        return javaProgrammers;
    }
}

********************************2018年7月2日18:38:33更新********************



 List<EmotionRecordDTO> recordData = emotionRecordMapper.getRecordData();
        recordData.forEach(dto -> {
            int total_day_scores = (int) dto.getEmotionDayDTOList().stream().map(day -> {
                int total_hour_scores = (int) day.getHourDTOList().stream().mapToInt(
                        hour -> hour.getScores()).summaryStatistics().getSum();
                day.setScores(total_hour_scores);
                return day;
            }).mapToInt(day -> day.getScores()).summaryStatistics().getSum();
            dto.setScores(total_day_scores);
        });
        return recordData;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章