The Red : STREAM
Predicate
- 하나의 값을 입력받아 참과 거짓을 판단한다.
- 3개의 default 메소드와 2개의 static 메소드가 존재한다. (default 메소드 까지만 학습한다)
- [공식문서]
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
default Predicate<T> negate() {
return (t) -> !test(t);
}
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
}
test 예제
@Test
void test_predicate(){
Predicate<Integer> isPositive = x -> x > 0;
assertThat(isPositive.test(10)).isTrue();
}
negate 예제
@Test
void test_predicate_negate(){
Predicate<Integer> isPositive = x -> x > 0;
assertThat(isPositive.negate().test(10)).isFalse();
}
or 예제
@Test
void test_predicate_or(){
Predicate<Integer> isPositive = x -> x > 0;
assertThat(isPositive.or( x -> x == 0 ).test(10)).isTrue();
assertThat(isPositive.or( x -> x == 0 ).test(0)).isTrue();
assertThat(isPositive.or( x -> x == 0 ).test(-1)).isFalse();
}
and 예제
@Test
void test_predicate_and(){
Predicate<Integer> isPositive = x -> x > 0;
assertThat(isPositive.and( x -> x == 0 ).test(10)).isFalse();
assertThat(isPositive.and( x -> x == 0 ).test(0)).isFalse();
assertThat(isPositive.and( x -> x == 0 ).test(-1)).isFalse();
}
Comparator
- 두 객체의 값을 비교할 떄 사용합니다.
- compare 메소드를 구현하여 사용하면 되지만, 주로 익명 함수로 사용합니다.
- 공식문서
예제
class User{
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
public class ComparatorTest {
List<User> users = Arrays.asList(
new User(5, "james"),
new User(2, "sonny"),
new User(3, "anny"));
@Test
void test_Comparator_id_asc(){
Comparator<User> idComparator = (u1, u2) -> u1.getId() - u2.getId();
Collections.sort(users, idComparator);
assertThat(users.get(0).getId()).isEqualTo(2);
}
@Test
void test_Comparator_id_desc(){
Comparator<User> idComparator = (u1, u2) -> u2.getId() - u1.getId();
Collections.sort(users, idComparator);
assertThat(users.get(0).getId()).isEqualTo(5);
}
@Test
void test_Comparator_name_asc(){
Comparator<User> nameComparator = (u1, u2) -> u1.getName().compareTo(u2.getName());
Collections.sort(users, nameComparator);
assertThat(users.get(0).getName()).isEqualTo("anny");
}
}
'TIL' 카테고리의 다른 글
2022/02/09 TIL (0) | 2022.02.10 |
---|---|
2022/02/08 TIL (0) | 2022.02.08 |
2022/02/06 TIL (0) | 2022.02.07 |
2022/02/05 TIL (0) | 2022.02.05 |
2022/02/04 TIL (JAVA8) (0) | 2022.02.05 |