본문 바로가기
java

필터링 과 맵핑

by improve 2024. 2. 15.

●필터링

package org.example;

import java.util.Arrays;
import java.util.List;

public class Main4 {
    public static void main(String[] args) {
        Person p1 = new Person("홍길동",20);
        Person p2 = new Person("김길동",40);
        Person p3 = new Person("이길동",30);
        Person p4 = new Person("박길동",50);

        List<Person> list = Arrays.asList(p1,p2,p3,p4);

        list.stream().filter(person -> person.getAge()==20).forEach(System.out::println); // 필터링 

        System.out.println();

        for (Person person : list){
            if(person.getAge() ==20){
                System.out.println(person);
            }
        }


    }
}

 

두가지 방법이 있다.

 

 

● 맵핑

package org.example;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class Main5 {
    public static void main(String[] args) {
        List<String> list1 = Arrays.asList("box", "robot", "simple");

        Stream<Integer> is = list1.stream().map(s -> s.length());
        is.forEach(System.out::println);

        list1.stream().map(s -> s + s).forEach(System.out::println);
        list1.stream().map(s -> s + "입니다.").forEach(System.out::println);


        Person p1 = new Person("홍길동", 20);
        Person p2 = new Person("김길동", 40);
        Person p3 = new Person("이길동", 30);
        Person p4 = new Person("박길동", 50);

        List<Person> list = Arrays.asList(p1, p2, p3, p4);
        list.stream()
                .map(person -> {
                    return person.getName() + "입니다.";
                })
                .forEach(System.out::println);

        for (Person person : list) {
            System.out.println(person.getName() + "입니다.");
        }
        int sum = list.stream()
                .mapToInt(person -> person.getAge())
                .filter(integer -> integer>20)
                .reduce(0, (a, b) -> a += b);
        System.out.println(sum);

    }
}

 

 

● 필터링 후 맵핑 

package org.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Toy {
    private String name;
    private int price;

    public Toy(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public int getPrice() {
        return price;
    }
}

public class Main6 {
    public static void main(String[] args) {
        List<Toy> list = Arrays.asList(new Toy("로봇", 3000),
                new Toy("총", 5000),
                new Toy("인형", 10000));

        int sum = list.stream()
                .filter(toy -> toy.getPrice() < 10000)
                .mapToInt(value -> value.getPrice())
                .sum();
        System.out.println(sum);

        int sum1 = list.stream()
                .filter(toy -> toy.getPrice() < 10000)
                .mapToInt(value -> value.getPrice())
                .reduce(0,(left, right) -> left + right);
        System.out.println(sum1);



    }
}

 

최종 연산에는 sum 이랑 reduce 가 있는데 sum은 제한되는것이 있기 때문에 reduce 도 사용해 봤습니다.

중간연산에는 filter이랑 map이 있습니다. 

 

 

●reduce

package org.example;

import java.util.Arrays;
import java.util.List;

public class Main7 {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("box","robot","complex","simple");
        String result = list.stream()
                        .reduce("",(s, s2) ->
                        {
                            if (s.length() > s2.length()) {
                                return s;
                            }
                            else
                                return s2;
                        }
                        );
        System.out.println(result);
    }
}

 

최종 연산에서 길이를 비교 했을때 가장 긴 값인 complex 가 출력이 된다.

'java' 카테고리의 다른 글

스트림의 최종연산  (1) 2024.02.15
스트림 2  (0) 2024.02.15
스트림의 이해와 생성  (1) 2024.02.15
미리 정의되어 있는 함수형 인터페이스  (1) 2024.02.13
람다와 함수형 인터페이스  (1) 2024.02.08