π λλ€μ
λλ€μμ΄λ λ©μλλ₯Ό νλμ μμΌλ‘ ννν κ²μΌλ‘ λ©μλλ₯Ό κ°λ΅νλ©΄μλ λͺ νν μμΌλ‘ νμν μ μλ€λ μ₯μ μ΄ μλ€.
ποΈ λλ€μμ κΈ°λ³Έ νν
λ©μλμμ λ°ν νμ κ³Ό μ΄λ¦μ μ κ±°νκ³ λ§€κ°λ³μ μ μΈλΆμ λͺΈν΅ μ¬μ΄μ νμ΄νλ₯Ό μΆκ°νλ©΄ λλ€.
λ°ννμ
λ©μλμ΄λ¦ (맀κ°λ³μ) {} =====> (맀κ°λ³μ) -> { }
// Example
int max(int a, int b) { return a < b ? b : a } ====> (int a, int b) -> return a < b? b : a
ποΈ ν¨μν μΈν°νμ΄μ€
μλ°μμ λͺ¨λ λ©μλλ ν΄λμ€ λ΄μ ν¬ν¨λμ΄μΌ νλ€. μ¦, ν΄λμ€ μμ΄λ ν¨μλ₯Ό μ¬μ©ν μ μλ€λ λ»μ΄λ€. κ·ΈλΌμλ λΆκ΅¬νκ³ λλ€μμ΄ ν΄λμ€ μμ΄ μ€νλ μ μλ μ΄μ λ λλ€μμ μ€μ λ‘λ μ΅λͺ κ°μ²΄μ΄κΈ° λλ¬Έμ΄λ€.
interface Helper {
public abstract int max(int a, int b);
}
Helper helper = New Helper() {
public int max(int a, int b) {
return a < b ? b : a;
}
}
λλ€μμ λ€λ£¨κΈ° μν΄ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ κ²μ κΈ°μ‘΄μ μλ° κ·μΉλ€κ³Ό λμΌνλ©° μμ°μ€λ½λ€. κ·Έλμ μλ°μμλ λλ€μμ λ€λ£¨κΈ° μν΄ νλμ λ©μλκ° μ μΈλ μΈν°νμ΄μ€λ₯Ό μ μν΄μ μ¬μ©νκΈ°λ‘ μ½μνλ€. μ΄λ₯Ό 'ν¨μν μΈν°νμ΄μ€' λΌκ³ νλ€.
λλ€μμμλ λ©μλ μ΄λ¦μ΄ λ€μ΄κ°μ§ μκΈ° λλ¬Έμ ν¨μν μΈν°νμ΄μ€μλ μ€μ§ νλμ μΆμ λ©μλλ§ μ μλμ΄μΌ νλ€.
ποΈ λλ€μμ νμ κ³Ό νλ³ν
λλ€μμ μ΅λͺ κ°μ²΄μ΄κ³ μ΅λͺ κ°μ²΄λ νμ μ΄ μλ€. λ μ ννλ νμ μ μ»΄νμΌλ¬κ° μμλ‘ μ νκΈ° λλ¬Έμ μ μ μλ€. κ·Έλμ λλ€μμ μ¬μ©ν λλ νλ³νμ΄ νμνλ€.
interface Helper {
public abstract void getName() { ... }
}
Helper helper = () -> {};
System.out.println(helper);
System.out.println((Helper)(() -> {})); // λλ€μμ λͺ
μμ μΌλ‘ νλ³νμ ν΄μ£Όμ΄μΌ νλ€.
μ½λμ²λΌ ν¨μν μΈν°νμ΄μ€(Helper)λ‘ λλ€μμ μ°Έμ‘°ν μλ μμ§λ§, μ΅λͺ κ°μ²΄κ° ν¨μν μΈν°νμ΄μ€ νμ μ μλλ€. helper μ°Έμ‘°μλ₯Ό μ΄μ©ν μλ μμ§λ§ λλ€μ μ체λ₯Ό μ΄μ©ν λλ λͺ μμ μΈ νλ³νμ΄ νμνλ€.
π java.util.function ν¨ν€μ§
java.util.function ν¨ν€μ§λ μΌλ°μ μΌλ‘ μμ£Ό μ°μ΄λ νμμ λ©μλλ₯Ό ν¨μν μΈν°νμ΄μ€λ‘ μ μν΄ λμλ€.
ν¨μν μΈν°νμ΄μ€ | λ©μλ | μ¬μ© |
---|---|---|
java.lang.Runnable | void Run() | 맀κ°λ³μμ λ°νκ°μ΄ μμ λ |
Supplier | T get() | 맀κ°λ³μλ μκ³ λ°νκ°λ§ μμ λ |
Consumer | void accept(T t) | 맀κ°λ³μλ§ μκ³ λ°νκ°μ΄ μμ λ |
Predicate | boolean test(T t) | 쑰건μμ ννν λ |
Function<T,R> | R apply(T t) | νλμ 맀κ°λ³μλ₯Ό λ°μμ κ²°κ³Όλ₯Ό λ°νν λ |
맀κ°λ³μλ‘ μΈμλ₯Ό λ κ° λκΈ°κ³ μΆλ€λ©΄ "Bi"λ₯Ό μ λμ¬μ λΆμ΄λ©΄ λλ€. BiConsumer, BiPredicate, BiFunction
μ΄μΈμλ UnaryOperator, BinaryOperator λ±μ ν¬ν¨ν΄ 컬λ μ νλ μμν¬μ λ§λ ν¨μν μΈν°νμ΄μ€λ μ 곡νκ³ μλ€.
π μ€νΈλ¦Ό
λ°μ΄ν° μμ€λ₯Ό μΆμννκ³ , λ°μ΄ν°λ₯Ό λ€λ£¨λλ° μμ£Ό μ¬μ©λλ λ©μλλ€μ μ μν΄ λμλ€. λ°λΌμ λ°μ΄ν° μμ€κ° 무μμ΄λ κ°μ κ°μ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλλ‘ λμμ€λ€. λ forλ¬Έκ³Ό Iteratorλ₯Ό μ¬μ©νλ κ²λ³΄λ€ κ°λ μ±μ΄ μ’λ€.
String[] arr = { 'aaa', 'bbb', 'ccc' };
List<String> list = List.of('a','b',c');
arr.stream().sorted().forEach(System.out::println);
list.stream().sorted().forEach(System.out::println);
ποΈ μ€νΈλ¦Όμ νΉμ§
1. μ€νΈλ¦Όμ λ°μ΄ν° μμ€λ₯Ό λ³κ²½νμ§ μλλ€. λ°μ΄ν°λ₯Ό μ½κΈ°λ§ νλ€.
2. μ€νΈλ¦Όμ μΌνμ©μΌλ‘ μ¬μ¬μ©ν μ μλ€.
3. μ€νΈλ¦Όμ 'λ΄λΆ λ°λ³΅'μ ν΅ν΄ μμ
μ κ°κ²°ν νλ€. μ¦, λ°λ³΅λ¬Έμ λ©μλμ λ΄λΆμ μ¨κΈΈ μ μλ€.
for(int num : nums) System.out.println(num);
stream().forEach(System.out::println);
// forEachλ λ€μκ³Ό κ°μ΄ ν¨μν μΈν°νμ΄μ€λ₯Ό λ°λλ€.
void forEach(Consumer<? super T> action) { ... }
ποΈ μ€νΈλ¦Όμ μ°μ°
μ€νΈλ¦Όμ μ°μ°μ μ€κ° μ°μ°κ³Ό μ΅μ’ μ°μ°μΌλ‘ ꡬλΆλλ€. μ€κ° μ°μ°μ μ°μν΄μ μ°κ²°λ μ μμΌλ μ΅μ’ μ°μ°μ λ¨ ν λ²λ§ κ°λ₯νλ€. λ©μλκ° λ§μΌλ μμΈν κ²μ 곡μ λ¬Έμλ₯Ό μ°Έκ³ νμ (https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html) μ°Έκ³ λ‘ Stream νμ μ 리ν΄νλ©΄ μ€κ° μ°μ°μ΄λ€.
μ€νΈλ¦Όμ νΉμ§
1. μ§μ°λ μ°μ° : μ΅μ’ μ°μ°μ΄ μνλκΈ° μ κΉμ§λ μ€κ° μ°μ°μ΄ μνλμ§ μλλ€.
2. Stream<T>μ κΈ°λ³Έν μ€νΈλ¦Ό : μ€νΈλ¦Όμ νμ μ΄ T, μ¦ μ λ€λ¦μΌλ‘ μ μΈλμ΄ μμ§λ§, μ€ν λ°μ±&μΈλ°μ±μΌλ‘ μΈν μ±λ₯ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ κΈ°λ³ΈνμΌλ‘ λ€λ£¨λ μ€νΈλ¦Όμ μ 곡νλ€. (IntStream, LongStream, DoubleStream)
3. λ³λ ¬ μ€νΈλ¦Ό : μ€νΈλ¦Όμ μ¬μ©νλ©΄ λ³λ ¬ μ²λ¦¬κ° μ½λ€.
int sum = strStream.parallel()
.mapToInt(s -> s.length())
.sum();
μ€νΈλ¦Όμ μ€κ°μ°μ°
1. skip(n), limit(m) : μ²μ nκ°μ μμλ₯Ό 건λλ°κ³ , μ€νΈλ¦Όμ μμλ₯Ό mκ°λ‘ μ ννλ€.
2. filter(Predicate<? super T> predicate) : μ£Όμ΄μ§ 쑰건μ λ§μ§ μλ μμλ₯Ό κ±Έλ¬λΈλ€.
3. distinct() : μ€νΈλ¦Όμμ μ€λ³΅λ μμλ€μ μ κ±°νλ€.
4. sorted(Comparator) : μ λ ¬ν λ μ¬μ©λλ€.
5. map() : μ€νΈλ¦Όμ μ μ₯λ κ° μ€μμ μνλ νλλ§ λ½μλΌ λ μ¬μ©λλ€.
6. peek() : μ°μ°κ³Ό μ°μ° μ¬μ΄μ μ¬λ°λ₯΄κ² μ²λ¦¬λμλμ§ νμΈν λ μ¬μ©λλ€.
μ€νΈλ¦Όμ μ΅μ’ μ°μ°
1. forEach() : λ°ν νμ μ΄ voidλ‘ μ€νΈλ¦Όμ μμλ₯Ό μΆλ ₯νλ μ©λ λ§μ΄ μ¬μ©λλ€.
2. allMatch(), anyMatch(), noneMatch(), findFirst(), findAny() : 쑰건 κ²μ¬λ₯Ό ν λ μ¬μ©λλ€.
3. count(), sum(), average(), max(), min() - κ³μ°ν λ μ¬μ©λλ€.
4. collect().toList(), toSet(), toMap(), toCollection(), toArray() : μ€νΈλ¦Όμ 컬λ μ κ³Ό λ°°μ΄λ‘ λ³ν
π λλ€μ μ°μ΅ λ¬Έμ
https://blog.devgenius.io/java-8-coding-and-programming-interview-questions-and-answers-62512c44f062