2019. 12. 20. 22:35ㆍ3_개발/3_1_JAVA
Stream에서는 정렬을 제공한다.
1. 객체에 비교에 대해 선언하지 않은 경우
sorted(Comparator<? super T> comparator) |
사용법
> 객체 (Cat.java)
public class Cat {
public Cat(int number, String name) {
this.number = number;
this.name = name;
}
private int number;
private String name;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
객체에 별 내용 없이, 생성자와 간단한 변수의 getter, setter 함수만 넣어보았다.
일반적으로 개발할 때 많이 사용하는 방법을 축약해 보았다.
위와 같이 객체 내에 비교에 대한 내용이 전혀 없는 그냥 순수하게 객체만 선언한 경우에는 Comparator를 이용하여 비교를 한다.
import java.util.Comparator;
> 객체에 값 입력
List<Cat> cats = Arrays.asList(
new Cat(1, "mina"),
new Cat(2, "sana"),
new Cat(3, "momo"),
new Cat(4, "jihyo")
);
고양이 함수에 4개의 객체를 추가하였다.
> sort 사용
import java.util.List;
import java.util.Arrays;
import java.util.Comparator;
public class CatStream {
public static void main(String[] args) {
List<Cat> cats = Arrays.asList(
new Cat(2, "sana"),
new Cat(3, "momo"),
new Cat(1, "mina"),
new Cat(4, "jihyo")
);
// 1. getNumber로 정순
cats.stream()
.sorted(Comparator.comparing(Cat::getNumber)) // 정렬 Cat의 number 변수로 정렬한다.
.forEach(System.out::println); // 출력
}
}
결과값
Cat [number=1, name=mina]
Cat [number=2, name=sana]
Cat [number=3, name=momo]
Cat [number=4, name=jihyo]
// 2. getNumber로 역순
cats.stream()
.sorted(Comparator.comparing(Cat::getNumber).reversed()) // 정렬 Cat의 getNumber로 역순정렬
.forEach(System.out::println); // 출력
결과값
Cat [number=4, name=jihyo]
Cat [number=3, name=momo]
Cat [number=2, name=sana]
Cat [number=1, name=mina]
위와 같은 방법으로 문자열도 가능하다.
// 3. 이름으로 순차정렬
cats.stream()
.sorted(Comparator.comparing(Cat::getName))
.forEach(System.out::println);
// 4. 이름으로 역순정렬
cats.stream()
.sorted(Comparator.comparing(Cat::getName).reversed())
.forEach(System.out::println);
결과값
Cat [number=4, name=jihyo]
Cat [number=1, name=mina]
Cat [number=3, name=momo]
Cat [number=2, name=sana]
====================
Cat [number=2, name=sana]
Cat [number=3, name=momo]
Cat [number=1, name=mina]
Cat [number=4, name=jihyo]
다수 정렬(두가지 이상을 이용한 정렬)
// 1. 이름으로만 정렬한 경우
cats.stream()
.sorted(Comparator.comparing(Cat::getName))
.forEach(System.out::println);
System.out.println("===============================");
// 2. 이름으로 정렬 후 숫자로 정렬한 경우
cats.stream()
.sorted(Comparator.comparing(Cat::getName)
.thenComparing(Cat::getNumber).reversed())
.forEach(System.out::println);
결과값
위와 같이 첫 번째에 name로 순차 정렬한 후, thenComparing을 이용하여
숫자로 한 번 더 정렬한다.
1. 이름으로만 정렬한 경우
Cat [number=4, name=jihyo]
Cat [number=1, name=mina]
Cat [number=3, name=momo]
Cat [number=2, name=sana]
===============================
2. 이름으로 정렬 후, 숫자로 역순정렬한 경우
Cat [number=2, name=sana]
Cat [number=3, name=momo]
Cat [number=1, name=mina]
Cat [number=4, name=jihyo]
sorted는 두가지가 있는데 한가지는 객체 내에 compare 함수를 넣어서 stream().sorted() 하는 방법과
compare를 이용하여 객체의 값들을 비교하여 정렬하는 방법이 있다.
compare 함수를 객체에 넣는 방법보다
저런 방식으로 정렬하는 경우가 개발하다보면 더 많아서
간단하게 정리해 보았다.
'3_개발 > 3_1_JAVA' 카테고리의 다른 글
[Stream] Java Stream을 이용한 배열 자르기 (0) | 2020.08.16 |
---|---|
List 형태의 객체들의 null 체크 또는 개수가 존재하는지 확인(null과 isEmpty()의 차이) (0) | 2019.12.25 |
static 변수에서 @value 사용(properties 값을 static으로 선언) (0) | 2019.12.18 |
Spring properties(프로퍼티) 값 가져오도록 설정 (0) | 2019.12.18 |
외부 jar 파일 maven에 추가(custom 라이브러리 추가) (0) | 2019.12.18 |