목차
- Iterable 기본 메소드
- Collection 기본 메소드
- Comparator 기본 메소드 및 스태틱 메소드
- 참고 자료
Iterable 기본 메소드
forEach()
public interface Iterable<T> {
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}
forEach() - 활용
public class Test {
public static void main(String[] args) {
List<String> name = new ArrayList<>();
name.add("keesun");
name.add("whiteship");
name.add("toby");
name.add("foo");
// forEach - 람다 표현식
name.forEach(s -> {
System.out.println(s);
});
// 메소드 래퍼런스
name.forEach(System.out::println);
}
}
spliterator()
public class Test {
public static void main(String[] args) {
List<String> name = new ArrayList<>();
name.add("keesun");
name.add("whiteship");
name.add("toby");
name.add("foo");
Spliterator<String> spliterator1 = name.spliterator();
Spliterator<String> spliterator2 = spliterator1.trySplit();
while (spliterator1.tryAdvance(System.out::println));
System.out.println("==================");
while (spliterator2.tryAdvance(System.out::println));
}
}
/* 출력 결과
toby
foo
==================
keesun
whiteship
*/
Collection의 기본 메소드
stream() / parallelStream()
// Collection 인터페이스
// default 메소드 stream()
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
// default 메소드 parallelStream()
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
stream() - 활용
List<String> name = new ArrayList<>();
name.add("keesun");
name.add("whiteship");
name.add("toby");
name.add("foo");
name.stream()
.map(String::toUpperCase) // Function 인터페이스 메소드 래퍼런스
.filter(s -> s.startsWith("K"))
.forEach(System.out::println);
// 출력
KEESUN
removeIf(Predicate)
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
removeIf(Predicate) - 활용
List<String> name = new ArrayList<>();
name.add("keesun");
name.add("whiteship");
name.add("toby");
name.add("foo");
name.removeIf(s -> s.length() == 3);
System.out.println(name.size());
/*
길이가 3인 foo 삭제
총 사이즈 = 3 출력
*/
Comparator의 기본 메소드 및 스태틱 메소드
- reversed()
- thenComparing()
- static reverseOrder() / naturalOrder()
- static nullsFirst() / nullsLast()
- static comparing()
reversed()
List<Integer> numbers = Arrays.asList(1, 4, 3, 2);
numbers.sort(Comparator.naturalOrder().reversed());
System.out.println(numbers); // 출력: [4, 3, 2, 1] (내림차순 정렬)
기존의 비교 순서를 반대로 뒤집는다.
thenComparing()
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 30),
new Person("Charlie", 25)
);
people.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
people.forEach(p -> System.out.println(p.getName() + " " + p.getAge()));
// 출력: Charlie 25, Alice 30, Bob 30
첫 번째 비교가 같을 때, 두 번째 기준으로 정렬
static reverseOrder()
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.sort(Comparator.reverseOrder());
System.out.println(names); // 출력: [Charlie, Bob, Alice] (내림차순 정렬)
자연 순서(오름차순)의 반대인 내림차순으로 정렬
static naturalOrder()
List<Integer> numbers = Arrays.asList(3, 1, 4, 2);
numbers.sort(Comparator.naturalOrder());
System.out.println(numbers); // 출력: [1, 2, 3, 4] (오름차순 정렬)
기본 정렬 순서(오름차순)로 정렬
static comparing()
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
people.sort(Comparator.comparing(Person::getAge)); // 나이 기준으로 정렬
people.forEach(p -> System.out.println(p.getName() + " " + p.getAge()));
// 출력: Bob 25, Alice 30, Charlie 35
특정 속성을 기준으로 정렬할 수 있는 Comparator를 생성
예시: Person 객체의 나이를 기준으로 정렬.
static nullsFirst()
List<String> names = Arrays.asList("Bob", null, "Alice", "Charlie");
names.sort(Comparator.nullsFirst(Comparator.naturalOrder()));
System.out.println(names); // 출력: [null, Alice, Bob, Charlie]
null 값을 우선 정렬하고, 나머지를 자연 순서로 정렬
static nullsLast()
List<String> names = Arrays.asList("Bob", null, "Alice", "Charlie");
names.sort(Comparator.nullsLast(Comparator.naturalOrder()));
System.out.println(names); // 출력: [Alice, Bob, Charlie, null]
null 값을 마지막에 정렬하고, 나머지를 자연 순서로 정렬
참고 자료
자바 8 공식 문서
- https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html
- https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html
- https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
'Computer Sience > Java' 카테고리의 다른 글
[JAVA8] Optional (0) | 2024.10.03 |
---|---|
[JAVA8] Stream (0) | 2024.10.02 |
[JAVA8] 인터페이스 기본 메소드와 스태틱 메소드 (0) | 2024.10.02 |
[JAVA8] 메소드 래퍼런스 (0) | 2024.09.30 |
[JAVA8] 람다 표현식 + 변수 캡쳐 & 변수 쉐도잉 (0) | 2024.09.30 |