Study/java

[Java] Stream - sort, min, max

sort()

sort는 Stream을 정렬해주는 메소드입니다.

매개변수가 없는 것과 Comparator를 매개변수로 받는 것 두 가지가 있습니다.

List<Integer> list = new ArrayList<>();
list.add(12);
list.add(83);
list.add(35);
list.add(7);
list.add(90);

list.stream()
    .sorted()
    .forEach(n -> System.out.print(n + " "));

sort() 결과

sort()를 사용하면 스트림의 요소들을 순서대로 정렬됩니다.

숫자면 오름차순으로, 문자열이면 사전순으로 정렬합니다.

 

정렬 기준을 지정해줄수도 있습니다.

List<String> list = new ArrayList<>();
list.add("eee");
list.add("ggg");
list.add("bbb");
list.add("aaa");
list.add("ooo");

list.stream()
    .sorted(String.CASE_INSENSITIVE_ORDER)
    .forEach(s -> System.out.print(s + " "));

Comparator를 사용한 sort 결과

 

String.CASE_INSENSITIVE_ORDER는 String 클래스에 있는, 사전 순서대로 정렬하도록 정의된 Comparator입니다.

Comparator를 사용하면 정렬 기준을 원하는대로 변경할 수 있습니다.

 

 

 

 

min

매개변수로 들어온 Comparator를 기준으로 하여, 가장 작은 요소를 반환합니다.

List<String> list = new ArrayList<>();
list.add("eee");
list.add("ggg");
list.add("bbb");
list.add("aaa");
list.add("ooo");

Optional<String> min = list.stream()
                           .min(String.CASE_INSENSITIVE_ORDER);
System.out.println(min.get());

min 결과

문자열 사전순으로 정렬했을 때 가장 앞에 오는 aaa가 반환되었습니다.

sort와 마찬가지로, Comparator를 사용해서 최소값 판별 기준을 자유롭게 지정할 수 있습니다.

 

max

매개변수로 들어온 Comparator를 기준으로 하여, 가장 큰 요소를 반환합니다.

List<String> list = new ArrayList<>();
list.add("a");
list.add("aa");
list.add("aaa");
list.add("aaaa");
list.add("aaaaa");

Optional<String> max = list.stream().max((o1, o2) -> Integer.compare(o1.length(), o2.length()));
System.out.println(max.get());

max 결과

문자열 리스트에서 길이가 가장 긴 요소가 반환되었습니다.

Comparator를 생성해서 정렬하고 싶다면 위와 같이 사용하면 됩니다.