λλ€μμ΄λ?
λλ€μμ λ©μλλ₯Ό νλμ μμΌλ‘ ννν κ²
κ°μ²΄ μ§ν₯ μΈμ΄ 보λ€λ ν¨μ μ§ν₯ μΈμ΄μ κ°κΉλ€.
λ©μλλ₯Ό κ°λ΅νλ©΄μλ λͺ νν μμΌλ‘ ννν μ μλλ‘ ν΄μ€λ€.
λ©μλλ₯Ό λλ€μμΌλ‘ νννλ©΄ λ©μλμ μ΄λ¦ λ° λ°ν κ°μ΄ μμ΄μ§λ―λ‘ μ΅λͺ ν¨μ λΌκ³ λ νλ€.
λλ€μμ ννλ λ§€κ° λ³μλ₯Ό κ°μ§ μ½λ λΈλ‘μ΄μ§λ§ λ°νμ μμλ μ΅λͺ ꡬν κ°μ²΄λ₯Ό μμ±νλ€.
μ€νΈλ¦Ό(stream) μ΄λ?
λ°μ΄ν° μ²λ¦¬ μ°μ°μ μ§μνλλ‘ μμ€μμ μΆμΆλ μ°μλ μμλ‘ μ μν μ μλ€.
컬λ μ κ³Ό λ§μ°¬κ°μ§λ‘ μ€νΈλ¦Όμ νΉμ μμ νμμΌλ‘ μ΄λ£¨μ΄μ§ μ°μλ κ° μ§ν©μ μΈν°νμ΄μ€λ₯Ό μ 곡νλ€.
μ€νΈλ¦Όμ 컬λ μ ,λ°°μ΄,I/O μμ λ±μ λ°μ΄ν° μ 곡 μμ€λ‘λΆν° λ°μ΄ν°λ₯Ό μλΉνλ€.
package ch17.streamEx;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
public class Ex01 {
public static void main(String[] args) {
List<String> list=Arrays.asList("A","B","C");
Iterator<String> it= list.iterator();
while(it.hasNext()) {
String s=it.next();
System.out.println(s);
}
System.out.println();
Stream<String> stream=list.stream();
stream.forEach(System.out::println); // λ©μλ μ°Έμ‘°
}
}
package ch17.lambdaEx;
public class Ex02 {
public static void main(String[] args) {
// λ§€κ°λ³μκ° μκ³ λ¦¬ν΄ νμ
μ΄ void μΈ λλ€μ
/*
User2 u;
u = () -> { System.out.println("λλ€μ..."); };
*/
// User2 u =() -> { System.out.println("λλ€μ..."); };
User2 u =() -> System.out.println("λλ€μ...");
u.disp();
}
}
interface User2 {
public void disp();
}
package ch17.lambdaEx;
public class Ex03 {
public static void main(String[] args) {
// νλμ λ§€κ°λ³μμ 리ν΄νμ
μ΄ void μΈ λλ€μ
// User3 u = (int a) -> { a+=10; System.out.println(a); };
// User3 u = (a) -> { a+=10; System.out.println(a); };
// User3 u = a -> { a+=10; System.out.println(a); };
User3 u = a -> System.out.println(a+10);
u.disp(10);
}
}
interface User3 {
public void disp(int a);
}
package ch17.lambdaEx;
public class Ex03 {
public static void main(String[] args) {
// νλμ λ§€κ°λ³μμ 리ν΄νμ
μ΄ void μΈ λλ€μ
// User3 u = (int a) -> { a+=10; System.out.println(a); };
// User3 u = (a) -> { a+=10; System.out.println(a); };
// User3 u = a -> { a+=10; System.out.println(a); };
User3 u = a -> System.out.println(a+10);
u.disp(10);
}
}
interface User3 {
public void disp(int a);
}
package ch17.lambdaEx;
public class Ex04 {
public static void main(String[] args) {
// λκ°μ λ§€κ°λ³μ, λ¦¬ν΄ νμ
μ‘΄μ¬
// User4 u = (a, b) -> { int c = a+b; return c; };
// User4 u = (a, b) -> { return a+b;};
User4 u = (a, b) -> a+b;
int s = u.add(10, 5);
System.out.println(s);
}
}
@FunctionalInterface
interface User4 {
public int add(int a, int b);
}
package ch17.lambdaEx;
public class Ex05 {
public static void main(String[] args) {
Test5 t = new Test5();
t.using();
}
}
interface User5 {
public void disp();
}
class Test5 {
int x = 10;
class Demo {
int y = 20;
public void sub() {
int a = 100;
int b = 50;
User5 u = () -> {
System.out.println(this);
// λλ€μμμ thisλ μ΅λͺ
κ°μ²΄κ° μλλΌ λλ€μμ ꡬνν ν΄λμ€
// Test5$Demo@34ce8af7
System.out.println(a);
// System.out.println(y);
System.out.println(this.y);
};
u.disp();
// a = 200; // μλ¬. λλ€μμμ μ¬μ©λ λ‘컬λ³μλ final μμ±
b = 100;
System.out.println(a);
System.out.println(b);
}
}
public void using() {
Demo obj = new Demo();
obj.sub();
}
}
package ch17.lambdaEx2;
public class Ex01 {
public static void main(String[] args) {
String s;
// s = String.valueOf(100);
// λλ€μ
Conversion c = n -> String.valueOf(100);
s = c.convert(100);
System.out.println(s);
// λ©μλ μ°Έμ‘°
// : λ©μλλ₯Ό μ°Έμ‘°νμ¬ λ§€κ°λ³μμ μ 보 λ° λ¦¬ν΄νμ
μ μμλ΄μ¬
// λλ€μμμ λΆνμν λ§€κ°λ³μλ₯Ό μ κ±°νλλ° λͺ©μ μ΄ μμ
Conversion c2 = String::valueOf;
s = c2.convert(200);
System.out.println(s);
}
}
interface Conversion {
public String convert(Integer n);
}
package ch17.lambdaEx2;
import java.util.function.Supplier;
public class Ex02 {
public static void main(String[] args) {
// Supplier : λ§€κ°λ³μ μκ³ , λ¦¬ν΄ κ° μ‘΄μ¬
// λλ€μ
Supplier<Object> o1 = () -> new Object();
Object ob1 = o1.get();
System.out.println(ob1);
// μμ±μ λ©μλ μ°Έμ‘°
Supplier<Object> o2 = Object::new;
Object ob2 = o2.get();
System.out.println(ob2);
}
}
package ch17.lambdaEx2;
import java.util.function.BiFunction;
public class Ex03 {
public static void main(String[] args) {
// BiFunction : λκ°μ λ§€κ°λ³μ(T, R), 리ν΄κ°(R)
BiFunction<String, String, Boolean> f1 =
(s1, s2) -> s1.equals(s2);
Boolean b = f1.apply("java", "java");
System.out.println(b);
// μΈμ€ν΄μ€ λ©μλ μ°Έμ‘°
BiFunction<String, String, Boolean> f2 =
String::equals;
Boolean b2 = f2.apply("java", "java");
System.out.println(b2);
}
}
Optional
package ch17.optionalEx;
import java.util.Optional;
/*
- Optional<T>
: T νμ
μ κ°μ²΄λ₯Ό ν¬μ₯ν΄μ£Όλ λνΌ ν΄λμ€
: 볡μ‘ν 쑰건문 μμ΄λ λ(null) κ°μΌλ‘ μΈν΄ λ°μνλ μμΈ μ²λ¦¬λ₯Ό ν μ μλ€.
- Optional κ°μ²΄ μμ± λ°©λ²
Optional.empty() : λΉ Optional κ°μ²΄
Optional.of(value) : value κ°μ΄ nullμ΄ μλ κ²½μ°.
null μ΄λ©΄ NullPointerException λ°μ
Optional.ofNullable(value) : value κ°μ΄ nullμΈμ§ μλμ§ νμ€νμ§ μλ κ²½μ°
- λ©μλ
get() : Optionalμ μ μ₯λ κ° λ°ν. null μ΄λ©΄ λ°νμ
orElse(other) : nullμ΄ μλλ©΄ κ·Έ κ°μ λ°ννκ³
nullμ΄λ©΄ other λ°ν
ifPresent(μΈμ) : Optional κ°μ²΄κ° nullμ΄λ©΄ false λ‘ μ무κ²λ λ°ννμ§ μμ
null μ΄ μλλ©΄ μΈμλ₯Ό μ€ν
orElseGet(μΈμ) : μ μ₯λ κ°μ΄ nullμ΄ μλλ©΄ κ·Έ κ°μ λ°ννκ³
null μ΄λ©΄ μΈμλ‘ μ λ¬λ κ°μ λ°ν
map(mapper) : mapper ν¨μλ₯Ό ν΅ν΄ μ
λ ₯ κ°μ λ€λ₯Έ κ°μΌλ‘ λ³ν
orElseThrow(μμΈν΄λμ€) : null μΈκ²½μ° μμΈ λμ§
*/
public class Ex01 {
public static void main(String[] args) {
// λΉ Optional κ°μ²΄
Optional<String> op = Optional.empty();
System.out.println(op.orElse("λΉκ°μ²΄"));
// orElse(other) : nullμ΄ μλλ©΄ κ·Έ κ°μ λ°ννκ³ nullμ΄λ©΄ other λ°ν
Optional<String> op2 = Optional.of("123");
// of(value) : value κ° null μ΄ μλ κ²½μ° μ¬μ©
String s = op2.get(); // Optional κ°μ²΄μ μ μ₯λ κ° λ°ν
System.out.println(s);
int n = op2.filter(x->x.length()>0)
.map(Integer::parseInt)
.get();
System.out.println(n);
String str = null;
Optional<String> op3 = Optional.ofNullable(str);
// empty Optional κ°μ²΄
// System.out.println(op3.get()); // λ°νμ
System.out.println(op3.orElse("λΉκ°μ²΄"));
str = "abc";
Optional<String> op4 = Optional.ofNullable(str);
// System.out.println(op4.get()); // abc
// System.out.println(op4.orElse("λΉκ°μ²΄")); // abc
op4.ifPresent(x->System.out.println(x.charAt(0))); // a
// ifPresent()
// : Optional κ°μ²΄κ° nullμ΄λ©΄ false. μ무κ²λ λ°ννμ§ μμ
// : null μ΄ μλλ©΄ μΈμλ₯Ό μ€ν
str = null;
// System.out.println(str.charAt(0)); // λ°νμ
Optional<String> op5 = Optional.ofNullable(str);
op5.ifPresent(a->System.out.println(a.charAt(0)));
// μ무κ²λ μΆλ ₯ λμ§ μλλ€. println()μ΄ μ€νλμ§ μλλ€.
User u = new User();
System.out.println(u.get(null)); // default
System.out.println(u.get("μλ°")); // μλ°
}
}
class User {
public String get(String s) {
Optional<String> op = Optional.ofNullable(s);
String str = op.orElseGet(this::defaultValue);
// orElseGet(a)
// : null μ΄ μλλ©΄ κ·Έ κ°μ λ°ννκ³
// : null μ΄λ©΄ μΈμλ‘ μ λ¬λ κ°(a) λ°ν
return str;
}
public String defaultValue() {
return "default";
}
}
package ch17.optionalEx;
import java.util.NoSuchElementException;
import java.util.Optional;
public class Ex02 {
public static void main(String[] args) {
// λ¬Έμμ΄μ μ μλ‘
Integer n = Optional.of("123")
.map(Integer::valueOf)
.orElseThrow(NoSuchElementException::new);
System.out.println(n);
n = Optional.of("123")
.map(Integer::valueOf)
.get();
System.out.println(n);
}
}
package ch17.optionalEx;
import java.util.Optional;
public class Ex03 {
public static void main(String[] args) {
String s = getCity2(null);
System.out.println(s);
}
public static String getCity(Order order) {
if(order != null) {
Member member = order.getMember();
if(member != null) {
Address address = member.getAddress();
if(address != null) {
String city = address.getCity();
if(city != null) {
return city;
}
}
}
}
return "λμ μμ";
}
public static String getCity2(Order order) {
return Optional.ofNullable(order)
.map(Order::getMember)
.map(Member::getAddress)
.map(Address::getCity)
.orElse("λμ μμ");
}
}
class Address {
private String city;
private String street;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
class Member {
private String id;
private String name;
private Address address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
class Order {
private long num;
private String product;
private Member member;
public long getNum() {
return num;
}
public void setNum(long num) {
this.num = num;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
}
μ€νΈλ¦Ό νΉμ§
μ€νΈλ¦Όμ λ°μ΄ν° μμ€λ‘ λΆν° λ°μ΄ν°λ₯Ό μ½κΈ°λ§ ν λΏ λ³κ²½νμ§ μλλ€. μ€νΈλ¦Όμ νλ²λ§ μ¬μ©ν μ μλ€. λ°λ³΅μμ λ§μ°¬κ°μ§λ‘ νλ² νμν μμλ₯Ό λ€μ νμνλ €λ©΄ λ°μ΄ν°μμ€μμ μλ‘μ΄ μ€νΈλ¦Όμ λ§λ€μ΄μΌ νλ€.
package ch17.streamEx;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
public class Ex01 {
public static void main(String[] args) {
List<String> list = Arrays.asList("A", "B", "C");
// 컬λ μ
μ¬μ© μ
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String s = it.next();
System.out.println(s);
}
System.out.println();
// μ€νΈλ¦Ό μ¬μ© μ
Stream<String> stream = list.stream();
// stream.forEach(s -> System.out.println(s)); // λλ€μ
stream.forEach(System.out::println); // λ©μλ μ°Έμ‘°
}
}
package ch17.streamEx;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Ex02 {
public static void main(String[] args) {
List<String> list = Arrays.asList("X", "A", "B", "A", "X", "C", "Y");
// μ€λ³΅ μ κ±°
// κΈ°μ‘΄ λ°©μ
for(int i=0; i<list.size(); i++) {
if(list.indexOf(list.get(i)) == i) {
System.out.println(list.get(i));
}
}
System.out.println();
// μ€νΈλ¦Ό
Stream<String> stream = list.stream();
stream.distinct()
.forEach(System.out::println);
System.out.println();
// μ΅μ’
μ°μ°μ μ€νΈλ¦Όμ μμλ₯Ό λͺ¨λ μλͺ¨νλ―λ‘ νλ²λ§ μ°μ°μ΄ κ°λ₯
// stream.forEach(System.out::println); // λ°νμμ€λ₯
Stream<String> stream2 = list.stream();
stream2.distinct() // μ€λ³΅μ κ±°(μ€κ°μ°μ°)
.limit(3) // μ€κ°μ°μ°
.sorted() // μ€μ°μ°μ°
.forEach(System.out::println);
}
}
package ch17.streamEx;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Ex03 {
public static void main(String[] args) {
// μ€νΈλ¦Ό μμ± λ°©λ²
// 컬λ μ
μμ μμ±
List<String> list = Arrays.asList("A", "B", "C");
Stream<String> stream = list.stream();
stream.forEach(System.out::print);
System.out.println("\n");
// λ°°μ΄μμ μμ±
String[] ss = new String[] {"A", "B", "C"};
// Stream<String> stream2 = Stream.of(ss); // μ€νΈλ¦Όμ ν΄λμ€ λ©μλ
Stream<String> stream2 = Arrays.stream(ss);
stream2.forEach(System.out::print);
System.out.println("\n");
// νΉμ λ²μμμ μ€νΈλ¦Ό μμ±
IntStream stream3 = IntStream.range(1, 6); // end λ²μ λ―Έν¬ν¨
stream3.forEach(System.out::print);
System.out.println("\n");
IntStream stream4 = IntStream.rangeClosed(1, 5); // end λ²μ ν¬ν¨
stream4.forEach(System.out::print);
System.out.println("\n");
// λμμμ μ€νΈλ¦Ό μμ±
IntStream stream5 = new Random().ints(); // 무ν μ€νΈλ¦Ό
stream5.limit(5).forEach(System.out::println);
System.out.println("\n");
IntStream stream6 = new Random().ints(5); // 5κ°μ λμ
stream6.forEach(System.out::println);
System.out.println("\n");
IntStream stream7 = new Random().ints(5, 1, 11); // 1~10μ¬μ΄μ 5κ°μ λμ
stream7.forEach(System.out::println);
System.out.println("\n");
}
}
package ch17.streamEx;
import java.util.stream.Stream;
public class Ex04 {
public static void main(String[] args) {
// μ€νΈλ¦Ό μμ± λ°©λ²
// λλ€μ
Stream<Integer> s = Stream.iterate(0, n -> n + 2);
// 무ν μ€νΈλ¦Ό. 0λΆν° μ§μ
// iterate(seed, f) : seed λΆν° fμ μν΄ κ³μ°λ κ²°κ³Όλ₯Ό λ€μ seedλ‘ ν΄μ κ³μ°μ λ°λ³΅
s.limit(5).forEach(System.out::println);
System.out.println();
// generate(s) : λλ€μμ μν΄ κ³μ°λ μμλ‘νλ 무ν μ€νΈλ¦Ό μμ±. μ΄μ κ²°κ³Όλ₯Ό κ³μ°μ μ¬μ©νμ§ μμ
Stream<Double> s2 = Stream.generate(Math::random);
s2.limit(5).forEach(System.out::println);
System.out.println();
}
}
package ch17.streamEx;
import java.util.stream.IntStream;
public class Ex05 {
public static void main(String[] args) {
// μ€νΈλ¦Ό μ€κ° μ°μ°
IntStream s1 = IntStream.range(0, 10);
s1.skip(4).forEach(n->System.out.print(n+" "));
// skip(n) : nκ° μ μΈ
System.out.println("\n");
IntStream s2 = IntStream.range(0, 10);
s2.limit(4).forEach(n->System.out.print(n+" "));
// limit(n) : μ²μλΆν° nκ° λ§νΌμΌλ‘ μ ν
System.out.println("\n");
IntStream s3 = IntStream.range(0, 10);
s3.skip(3).limit(4).forEach(n->System.out.print(n+" "));
System.out.println("\n");
// νμλ§
IntStream s4 = IntStream.range(0, 10);
s4.filter(n->n%2!=0).forEach(n->System.out.print(n+" "));
// filter(쑰건) : 쑰건μ λ§μ‘±νλ μμλ‘ κ΅¬μ±λ νν°
System.out.println("\n");
// peek() : μ€νΈλ¦Όμ μμλ₯Ό μλͺ¨νμ§ μμΌλ―λ‘ μ¬λ¬λ² μ¬μ© κ°λ₯
IntStream s5 =
IntStream.of(7,5,5,2,1,2,3,5,4,6);
s5.peek(s -> System.out.println("μλ³Έ:"+s))
.skip(2)
.peek(s -> System.out.println("skip(2):"+s))
.limit(5)
.peek(s -> System.out.println("limit(5):"+s))
.sorted()
.forEach(System.out::println);
}
}'π» > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| (38) [JAVA] 22μΌ (0) | 2024.04.10 |
|---|---|
| (36-37) [JAVA] 20-21μΌ (0) | 2024.04.10 |
| (35) [JAVA] 19μΌ (1) | 2024.04.10 |
| (34) [JAVA] 18μΌ μ μΆλ ₯ μ€νΈλ¦Ό(I/O Stream) - 2 (0) | 2024.04.03 |
| (33) [JAVA] 18μΌ μ μΆλ ₯ μ€νΈλ¦Ό(I/O Stream) (0) | 2024.04.03 |