자바의 스트림 API 사용

24894 단어 lambdastreamjavajava8
Java 8에 도입된 인터페이스로 Java의 선언적 프로그래밍에 기여했습니다. 선언적 프로그래밍은 컴파일러에게 수행 방법을 알려주는 대신 원하는 것을 설명하는 프로그래밍 스타일입니다. 이것이 명령형 프로그래밍입니다. 스트림은 순차 및 병렬 집계 작업을 지원하는 요소 시퀀스입니다. 즉, 일련의 요소를 처리하기 위한 작업 파이프라인을 정의할 수 있습니다.

스트림 파이프라인은 배열, 컬렉션, I/O 채널 등이 될 수 있는 소스로 시작합니다. 해당 소스에 연결되어 없음에서 여러 중간 작업 및 마지막으로 결과를 생성하는 터미널 작업에 이르기까지 어디에나 연결됩니다. 스트림은 지연되고 계산은 터미널 작업이 시작된 후에만 발생합니다.

아래에서 Java Stream API가 제공하는 몇 가지 기능을 보여드리겠습니다.

기능을 시연하는 데 사용할 개체:

public class Pet {

    private final String name;
    private final int age;
    private final Type type;

    public Pet(String name, int age, Type type) {
        super();
        this.name = name;
        this.age = age;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Type getType() {
        return type;
    }

    @Override
    public String toString() {
        return "Pet [name=" + name + ", age=" + age + "]";
}
    }


애완 동물의 유형을 설명하는 데 사용되는 열거형과 함께:

public enum Type {
    DOG, CAT
}


이제 데모로 이동합니다.

public class Demo {


    public static void main(String[] args) {
        List<Pet> petAnimals = getPets();

        // find all dogs
        System.out.println("Find All Dogs");
        List<Pet> dogs = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.DOG))
                .collect(Collectors.toList());
        dogs.forEach(System.out::println);

        // sort by age
        System.out.println("\nSort By Age");
        List<Pet> ages = petAnimals.stream()
                .sorted(Comparator.comparing(Pet::getAge))
                .collect(Collectors.toList());
        ages.forEach(System.out::println);

        // average age of cats
        System.out.println("\nAverage Age of Cats");
        Double avgCatAge = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.CAT))
                .collect(Collectors.averagingInt(Pet::getAge));
        System.out.println(avgCatAge);

        // average age of all pets
        System.out.println("\nAverage Age of Pets");
        Double avgPetAge = petAnimals.stream()
                .collect(Collectors.averagingInt(Pet::getAge));
        System.out.println(avgPetAge);

        // name of youngest dog
        System.out.println("\nName of Youngest Dog");
        petAnimals.stream()
            .filter(animal -> animal.getType().equals(Type.DOG))
            .min(Comparator.comparing(Pet::getAge))
            .map(animal -> animal.getName())
            .ifPresent(System.out::println);

        // number of cats
        System.out.println("\nNumber of Cats");
        long numOfCats = petAnimals.stream()
            .filter(animal -> animal.getType().equals(Type.CAT))
            .count();
        System.out.println(numOfCats);


    }

    private static List<Pet> getPets(){
        return Arrays.asList(
            new Pet("Marley", 5, Type.DOG),
            new Pet("Beethoven", 2, Type.CAT),
            new Pet("Ernest", 4, Type.DOG),
            new Pet("Tabby", 7, Type.CAT),
            new Pet("Snowball", 1, Type.CAT),
            new Pet("Lassie", 3, Type.DOG),
            new Pet("Little Nicky", 6, Type.CAT),
            new Pet("Copper", 12, Type.DOG)
        );
    }
}



// find all dogs
        System.out.println("Find All Dogs");
        List<Pet> dogs = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.DOG))
                .collect(Collectors.toList());
        dogs.forEach(System.out::println);


  • 컬렉션을 스트림으로 변환
  • 유형에 따라 객체를 다른 스트림으로 필터링합니다.
  • 이전 술어와 일치하는 개체만 반환합니다.

  • // sort by age
            System.out.println("\nSort By Age");
            List<Pet> ages = petAnimals.stream()
                    .sorted(Comparator.comparing(Pet::getAge))
                    .collect(Collectors.toList());
            ages.forEach(System.out::println);
    


  • 컬렉션을 스트림으로 변환
  • 나이를 기준으로 개체 스트림을 오름차순으로 정렬합니다
  • .
  • 이전 술어와 일치하는 개체만 반환합니다.

  • // average age of cats
            System.out.println("\nAverage Age of Cats");
            Double avgCatAge = petAnimals.stream()
                    .filter(animal -> animal.getType().equals(Type.CAT))
                    .collect(Collectors.averagingInt(Pet::getAge));
            System.out.println(avgCatAge);
    


  • 컬렉션을 스트림으로 변환
  • 유형에 따라 객체를 다른 스트림으로 필터링합니다.
  • 주어진 함수의 평균과 일치하는 객체로 스트림을 줄입니다.

  • // average age of all pets
            System.out.println("\nAverage Age of Pets");
            Double avgPetAge = petAnimals.stream()
                    .collect(Collectors.averagingInt(Pet::getAge));
            System.out.println(avgPetAge);
    


  • 컬렉션을 스트림으로 변환
  • 주어진 함수의 평균과 일치하는 객체로 스트림을 줄입니다.

  • // name of youngest dog
            System.out.println("\nName of Youngest Dog");
            petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.DOG))
                .min(Comparator.comparing(Pet::getAge))
                .map(animal -> animal.getName())
                .ifPresent(System.out::println);
    


  • 컬렉션을 스트림으로 변환
  • 유형에 따라 객체를 다른 스트림으로 필터링합니다.
  • 스트림의 최소 요소를 반환합니다
  • .
  • 요소를 탐색하고 이름을 반환합니다.

  • // number of cats
            System.out.println("\nNumber of Cats");
            long numOfCats = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.CAT))
                .count();
            System.out.println(numOfCats);
    


  • 컬렉션을 스트림으로 변환
  • 유형에 따라 객체를 다른 스트림으로 필터링합니다.
  • 스트림의 요소 수를 반환합니다
  • .

    좋은 웹페이지 즐겨찾기