JAVA - 람다와 스트림(문제 풀기)

DevSeoRex·2022년 11월 17일
1
post-thumbnail

자바의 정석 3판 - 연습문제 14-4

  • 배열에 4개의 원소가 있고, 문자열의 각 길의를 더하면 되는 문제이므로, 문자열의 길이들을 요소로 하는
    스트림을 생성하고, 바로 sum( )을 이용해서 값을 뽑아내게 작성하였다.
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Exercise14_4 {
    public static void main(String[] args) {
        String[] strArr = {"aaa", "bb", "c", "dddd"};

        // strArr을 요소로 하는 스트림 생성
        Stream<String> strSTream = Stream.of(strArr);
        
        // 요소들의 길이들을 요소로 하는 정수형 스트림으로 변환
        IntStream intStream = strSTream.mapToInt(String::length);
        
        // 요소들을 모두 더해서 출력
        System.out.println("sum = "  + intStream.sum());

        // 합계를 구하는 코드를 한줄로 축약 - 1
        int sum1 = Arrays.stream(strArr).mapToInt(String::length).sum();

        System.out.println("sum = " + sum1);
    }
}

자바의 정석 3판 - 연습문제 14-5

  • strArr의 요소들을 요소로 삼는 스트림을 생성하고, 14-4와 같이 기본형 스트림(IntStream)으로 변환해서
    최대값을 뽑아내면 된다.
  • stream.max( )까지만 하면 OptionalInt를 반환 하므로, 한번 더 도트 연산자를 이용해 getAsInt( )를 호출해야 정수형으로 리턴받을 수 있다.
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Exercise14_5 {
    public static void main(String[] args) {
        String[] strArr = {"aaa", "bb", "c", "dddd"};

        // strArr을 요소로 하는 스트림 생성
        Stream<String> strStream = Stream.of(strArr);

        // strStream을 IntStream으로 변경(요소들의 길이를 정수 값으로 뽑아낸다)
        IntStream stream = strStream.mapToInt(String::length);

        // 최대값 뽑아내기
        int max1 = stream.max().getAsInt();

        // 한줄로 축약 - 1
        int max2 = Arrays.stream(strArr).mapToInt(String::length).max().getAsInt();

        System.out.println("max = " + max1);
        System.out.println("max = " + max2);
    }
}

자바의 정석 3판 연습문제 14-6

  • Random 클래스를 이용해 난수를 발생시키는 스트림을 만들고, IntStream에 담아서 요소의 갯수를 제한한 후
    중복제거 및 정렬후에 출력을 하면 된다.
import java.util.Random;
import java.util.stream.IntStream;

public class Exercise14_6 {
    public static void main(String[] args) {
        
        // 기본형 스트림에 난수를 발생시키는 스트림을 저장
        IntStream intStream = new Random().ints(1,46);
        
        // 중복제거 -> 요소의 개수 제한 -> 정렬 -> 모든 요소 출력 순으로 스트림을 소모함
        intStream.
                distinct().                     // 중복제거
                limit(6).                       // 요소의 개수 제한
                sorted().                       // 정렬
                forEach(System.out::println);   // 모든 요소 출력
        
        // 한줄로 축약 (따로 스트림에 저장하지 않고, 바로 난수를 발생시켜 스트림을 소모시키면서 출력)
        new Random().ints(1, 46)
                .distinct()
                .limit(6)
                .sorted()
                .forEach(System.out::println);
    }
}

출처 : 자바의 정석 3rd Edition(남궁성 저, 도우출판)

0개의 댓글