본문 바로가기
Today I learned

2021 11 18 stream은 손에 안익네..

by soheemon 2021. 11. 18.

 

언제든지 사용할수 있도록 예제 치트시트 만들기 프로젝트

package domain;


public class Person {
    private int age;
    private String name;
    private Gender gender;

    public Person(int age, String name, Gender gender) {
        this.age = age;
        this.name = name;
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Gender getGender() {
        return gender;
    }

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

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", gender=" + gender +
                '}';
    }
}
public enum Gender {
    FEMALE, MALE
}
public class Main {
    public static void main(String[] args) {

        // 리스트에서 여자만 구하기 + 필터 응용
        getSamplePersonList()
                .stream()
                .filter(person -> person.getGender().equals(Gender.FEMALE))
                .forEach(person -> System.out.println(person));

        // 나이로 정렬하기 sored 활용!
        getSamplePersonList()
                .stream()
                .sorted(Comparator.comparing(Person::getGender).reversed())
                .forEach(person -> System.out.println(person));

        //사람들이 전부 20살보다 많은지?
        boolean isOrderThan20 = getSamplePersonList()
                .stream()
                .allMatch(Person -> Person.getAge() > 20);
        System.out.println(isOrderThan20);

        // 120살 넘은사람이 하나라도 있는지?
        boolean isAnyoneOrderThan120 = getSamplePersonList()
                .stream().anyMatch(person -> person.getAge() > 120);
        System.out.println("isAnyoneOrderThan120" + isAnyoneOrderThan120);

        // soheemon이라는 이름을 가진 사람이 없는지?
        boolean hasSoheemon = getSamplePersonList()
                .stream()
                .noneMatch(person -> person.getName().equals("soheemon"));
        System.out.println("hasSoheemon -> " + hasSoheemon);

        // 나이 가장 많은사람 찾기!
        getSamplePersonList()
                .stream()
                .max(Comparator.comparing(Person::getAge))     // optinal을 반환한다..
                .ifPresent(person -> System.out.println(person));

        // gender로 groupby 하기. 리스트로 저장 가능.
        //Map<Gender, List<Person>> genderGruop
        getSamplePersonList()
                .stream()
                .collect(Collectors.groupingBy(Person::getGender))
                .forEach((gender, people) -> {
                    System.out.println(gender + "---------");
                    people.stream().forEach(person -> {
                        System.out.println(person);
                    });
                });

        // 나이랑 성별가지고 사람 구하기....
        boolean findPerson =  getSamplePersonList()
                .stream()
                .anyMatch((person) -> {
                    return person.getName().equals("soheemon")
                            && person.getGender().equals(Gender.FEMALE);
                });
        System.out.println("findPerson" + findPerson);

        // 가장 나이 많은 여자의 이름 구하기
        getSamplePersonList()
                .stream()
                .max(Comparator.comparing(Person::getAge))
                .ifPresent((orderWoman) -> {
                     System.out.println(orderWoman.getName());
                });
    }

    public static List<Person> getSamplePersonList() {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person(13, "soheemon", Gender.FEMALE));
        personList.add(new Person(12, "babo", Gender.FEMALE));
        personList.add(new Person(123, "minso", Gender.MALE));
        personList.add(new Person(14, "dubu", Gender.MALE));
        return personList;
    }
}

댓글