際際滷

際際滷Share a Scribd company logo
JAVA
 : https://github.com/hyomee/JAVABASIC
1. Stream 蠍磯蓋
- 一一 蟲豌伎 襷♀鍵覃, 螳れ 覓苦 豌襴螻   讌   旧 豢企,
( 讀, 蠏 螻  蠍磯レ る 蠏 蟲螻   豺伎危碁ゼ 螻 螻 蟆郁骸襯 豺蠍  れ る襯  一一 覲  殊 ろ碁 殊企襴 襷♀鹸. )
- 覦一願骸 貉 朱 豌襴   .
( 讀, 覦一  貉 語ろ伎れ   螳襯 譟壱伎  蟆郁骸襯 譟壱伎 蟆郁骸襯 磯螻 螳螻給 蟆郁骸襯 詞  . )
- 覲豌襴螳 螳ロ.
( 讀, 磯襯 伎 襷 れ 觜襯願 豌襴   . )
- Stream 企至螳  覓伎 企.
- Stream れ 覲願 讌 . ( れ 覿 Collection 覲願 蟇磯    )
- Stream 一一 覲語 覲蟆 讌 . ( 蟆郁骸 襦 ろ碁殊朱 覦  )
- Stream 一一 螳ロ覃 讌(Lazy)豌襴 .
- Stream  : Stream instance 
- Stream 螳螻 : 豐蠍 Stream るジ Stream朱 覲 譴螳 一 (Intermediate operations)
:: Filtering, Mapping ->  伎 螻襦 讌
- Stream 蟆郁骸 : 豕譬 一(terminal operations)  :  一一 讌一一磯れ ろ 螳 ,
危襦 企 Stream     
豌 襷ろ 磯 n 蟆郁骸 襷り鍵 蟆郁骸
- for, foreach覓語   襯  蟶朱伎 豌襴.
- 覓(襦讌) 覲旧 覃 襦讌 願 貊  襷
- 譴豌 for覓 朱  企る
List<String> words = new ArrayList<>();
words.add("java");
words.add("javascript");
words.add("python");
words.add("c#");
int count = 0;
for ( String s : words) {
if ( s.length() > 4) count++;
}
System.out.println("count :: " + count);
long streamCnt = words.stream().filter(s->s.length()>4).count();
System.out.println("streamCnt :: " + streamCnt);
蟆郁骸 count :: 2
streamCnt :: 2
2. Stream 
- Array : Arrays.stream 
System.out.println("===== Stream 覲 =======");
String[] strings = new String[]{"c#", "java", "java script"};
Stream<String> stringStream = Arrays.stream(strings);
stringStream.forEach(s -> System.out.println(s));
System.out.println("===== 覦一伎   谿剰鍵 =======");
Stream<String> stringStreamOfElement = Arrays.stream(strings, 1,3) ;
stringStreamOfElement.forEach(s -> System.out.println(s));
===== Stream 覲 =======
c#
java
java script
===== 覦一伎   谿剰鍵
java
java script
- Collection, List, Set : stream 
- 覲 豌襴 : parallelStream 
List<String> stringList = new ArrayList<>();
stringList.add("c");
stringList.add("java");
stringList.add("java script");
stringList.add("c++");
stringList.add("c#");
// Stream 覲
System.out.println("===== Stream 覲 ======= :: " );
Stream<String> stringStream = stringList.stream();
stringStream.forEach(s -> System.out.println(s));
System.out.println("===== parallelStream 覲 =======");
Stream<String> stringParallelStream = stringList.parallelStream();
stringParallelStream.forEach(s -> System.out.println(s));
System.out.println("===================================================");
System.out.println("*. Stream.of襯 伎 Stream  ");
Stream<String> streamof = Stream.of("java", "c#", "c++");
streamof.forEach(o->System.out.println(o.getClass() + "::" + o));
class java.lang.String::java
class java.lang.String::c#
class java.lang.String::c++
===== Stream 覲 ======= ::
c
java
java script
c++
c#
===== parallelStream 覲
=======
java script
c#
c++
c
java
Stream<String> stream = Stream.empty();
System.out.println("stream :: " + stream.count());
System.out.println("Stream.<String>empty() 螳");
stream :: 0
Stream.<String>empty() 螳
2. Stream 
===== Stream 覲 =======
c#
java
java script
===== 覦一伎   谿剰鍵
java
java script
System.out.println("===================================================");
System.out.println("2. builer襯 伎 螳豌  ( Object ) ");
Stream<Object> objectStream = Stream.builder()
.add("java")
.add("c#")
.add("java scaipt")
.build();
objectStream.forEach(o->System.out.println(o.getClass() + "::" + o));
System.out.println("===================================================");
System.out.println("2. builer襯 伎 螳豌  ( String ) ");
Stream<String> stringStream = Stream.<String>builder()
.add("java")
.add("c#")
.add("java scaipt")
.build();
stringStream.forEach(o->System.out.println(o.getClass() + "::" + o));
- 譯殊 伎襯 伎狩
Stream<String> streamGenerate = Stream.generate(()->"Echo").limit(5);
streamGenerate.forEach(o->System.out.println(o.getClass() + "::" + o));
//  (random number) 
Stream<Double> streamGenerateRandoms = Stream.generate(Math::random).limit(5);
streamGenerateRandoms.forEach(o->System.out.println(o.getClass() + "::" + o));
class java.lang.String::Echo
class java.lang.String::Echo
class java.lang.String::Echo
class java.lang.String::Echo
class java.lang.String::Echo
class java.lang.Double::0.4853244219582693
class java.lang.Double::0.8893768469236104
class java.lang.Double::0.6801395514026836
class java.lang.Double::0.40567815077776515
class java.lang.Double::0.23895785683876747
3. 蠍磯蓋  Stream
- IntStream : short, char, byte, Boolean 
- longStream : long
- doubleStream: float
- IntStream  る IntStream.of, Arrays,stream 覃 
- IntStream.builder().build() 
- Arrays.stream(values. from, to )
-  generate, iterate 
- IntStream, longStream : 蠍郁 1  覯襯 燕  range, rangeClosed
IntStream zeroToNinetyNine = IntStream.range(0,100); // 100 
IntStream zeroToHundred = IntStream.rangeClosed(0,100); // 100 
class java.lang.Integer::50
class java.lang.Integer::55
class java.lang.Integer::60
class java.lang.Integer::65
class java.lang.Integer::70
IntStream intStream = IntStream.builder()
.add(2)
.add(34)
.add(40)
.build();
intStream.forEach(i -> System.out.println(i));
System.out.println("====================");
intStream = IntStream.of(30, 40, 50);
intStream.forEach(i -> System.out.println(i));
System.out.println("====================");
int[] intArrays = new int[]{20,30,40};
intStream = Arrays.stream(intArrays, 1,3);
intStream.forEach(i -> System.out.println(i));
2
34
40
====================
30
40
50
====================
30
40
- 螳豌 Stream 蠍磯蓋  ろ碁殊朱 覲
- 蠍磯蓋  ろ碁殊 螳豌 ろ碁殊朱 覲 : boxed 
List<String> stringList = new ArrayList<>();
stringList.add("c");
stringList.add("java");
stringList.add("java script");
stringList.add("c++");
stringList.add("c#");
System.out.println("===== Stream 覲 ======= :: " );
Stream<String> stringStream = stringList.stream();
System.out.println("===== IntStream 覲 ======= :: " );
IntStream lenths = stringStream.mapToInt(String::length);
lenths.forEach(i -> System.out.println(i));
System.out.println("===== Stream 覲 ======= :: " );
Stream<Integer> integerStream = IntStream.range(0,5).boxed();
integerStream.forEach(i -> System.out.println(i));
===== Stream 覲 ======= ::
===== IntStream 覲 ======= ::
1
4
11
3
2
===== Stream 覲 ======= ::
0
1
2
3
4
- toArray 蠍磯蓋  覦一伎 襴
- 旧 蟆郁骸襯 れ朱 覃 OptionalInt, OprionalLong, OptionalDouble 襴
getAsInt, getAsLong, getAsDouble 
- Optional function get 
- 蠍磯蓋  Stream 蠏, 豕螳, 豕螳 襴  sum, average, max, min
- summaryStatistics覃 ろ碁殊 螻, 蠏, 豕螳, 豕螳  覲願   
intSummaryStatistics, LongSummaryStatistics, DoubleSummarySatistics 蟆豌企ゼ れ
4. 覲 Stream
- Collection.parallelStream 誤螻 谿 ろ碁(Sequential Stream) 
- Stream  parallelStream 覃襯 伎 
Stream<String> parallelStream = Stream.of(strArrays).parallelStream();
Stream<CustInfo> parallelCustInfoStream = custInfoList.parallelStream();
- 覲 覿  : isParallel
- 覲 覈襦 ろ 覃 豕譬 覃(terminal method)螳 ろ   覈 讌
豌襴 譴 譴螳 ろ碁 一一 覲  :: 一磯れ 覓伎(stateless)螻  
襦 ろ
:: る  覲伎, race condition煙 螻 伎 
List<String> stringList = new ArrayList<>();
stringList.add("c");
stringList.add("java");
stringList.add("java script");
stringList.add("c++");
stringList.add("c#");
// Stream 覲
System.out.println("===== Stream 覲 ======= :: " );
Stream<String> stringStream = stringList.stream();
stringStream.forEach(s -> System.out.println(s));
System.out.println("===== parallelStream 覲 =======");
Stream<String> stringParallelStream = stringList.parallelStream();
stringParallelStream.forEach(s -> System.out.println(s));
===== Stream 覲 ======= ::
c
java
java script
c++
c#
===== parallelStream 覲
=======
java script
c#
c++
c
java
5.  Interface
- 1螳 豢 覃襯 螳讌螻  誤壱伎 :: Single Abstract Method(SAM)
-  伎 : 覦 れ  誤壱伎る襷 蠏 螳 蠍 覓
public class FunctionalInterace {
interface FunctionalInterface {
public abstract void doWork(String text);
}
public static void main(String[] strings) {
// 給 企 
FunctionalInterface func01 = new FunctionalInterface() {
@Override
public void doWork(String text) {
System.out.println(text);
}
};
func01.doWork("給 企 :: 願  ");
//  
FunctionalInterface func = text -> System.out.println(text);
func.doWork(" :: 願  ");
}
}
給 企れ  螻牛旧
- 給企る り 碁  覦蟾 企れ 覃る 覲 覃 蠏   
- 讌襷 覃る 覲 覃 襷り覲 蠏狩蠍 伎 企 覲れ final 轟煙 螳讌螻 伎 .
給 企れ  谿伎
- 給企れ れ this 覩碁 るゴ
: 給企れ this 給企  螳襴れ襷 れ this 碁 企るゼ 螳襴給.
- る  覲(Shadow Variable) 讌 
給企れ れ this 覩碁 るゴ
: 給 企る 覲襯 誤   讌襷 る 企ゼ 讌 給.
- る 誤壱伎れ 覦  覃襷 螳讌螻 伎 !
: 誤壱伎れ @FunctionalInterface 企誤伎 覿企 螳 伎 豢 覃螳 碁 蟆曙
貉危 襯 覦.
 誤壱伎 朱誤  襴  る
Supplier<T>  T T  螳 襴
Consumer<T> T void T  螳 觜
BiConsumer<T, U> T, U void T, U  螳 觜
Predicate<T> T boolean Boolean 螳 襴
ToIntFunction<T>
ToLongFunction<T>
ToDoubleFunction<T>
T Int
long
double
T  螳 語襦 覦螻 Int, long, double 襴
IntFunction<T>
LongFunction<T>
DoubleFunction<T>
Int
long
double
R 覦螻 Int, long, double 語襦 覦螻 R  襴
 誤壱伎 朱誤  襴  る
Function<T, R> T R T  螳 語襦 覦螻 R  襴
BiFunction<T, U, R> T, U R T, U  語襦 覦螻 R  襴
UnaryOperator<T> T T T    一一
BinaryOperator<T> T, T T T   危 一一
6. 覦 蠍磯蓋 螻  Interface
- Runnable : 語襯 覦讌 螻 襴願  誤壱伎
- Supplier : 語襯 覦讌 螻 T 螳豌企ゼ 襴
- Consumer : T 語襯 覦螻 襴願  :
andThen 覃 螳 伎 一 Consumer襯 ろ   
- Function<T, R> : T  語襯 覦螻 R 螳豌企ゼ 襴
- Predicate : T  語襯 覦螻 boolean襯 襴
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Runnable runnable = () -> System.out.println("Runnable....");
runnable.run(); Runnable....
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Supplier supplier = () -> "Supplier .... ";
String str = (String) supplier.get();
System.out.println(str);
Supplier ....
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
Consumer<String> consumer = text -> System.out.println("Consumer...." + text);
Consumer<String> consumerandThen = text -> System.out.println("Consumer andThen...." + text);
consumer.andThen(consumerandThen().accept("String type");
Consumer....String type
Consumer andThen....String
type
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
static <T> Function<T, T> identity() {
return t -> t;
}
}
Function<Integer, Integer> multiply = (value) -> value * 2;
Integer result = multiply.apply(5);
System.out.println("Function...." + result);
Function<Integer, Integer> add = (value) -> value + 2;
Function<Integer, Integer> addMultiply = multiply.compose(add); // add   multiply  
result = addMultiply.apply(5);
System.out.println("Function....addMultiply :: " + result);
Function....10
Function....addMultiply :: 14
// Predicate
Predicate..test, .and , .or, negate, isEqual, .not
Predicate<Integer> predicate = (num) -> num > 10;
System.out.println("Predicate.... :: " + predicate.test(5));
Predicate<Integer> predicate1 = (num) -> num < 20;
System.out.println("Predicate.... 10 < num < 20 :: " + predicate.and(predicate1).test(25));
System.out.println("Predicate.... 10 < num or num < 20 :: " + predicate.or(predicate1).test(25));
Predicate.... :: false
Predicate.... 10 < num < 20 :: false
Predicate.... 10 < num or num < 20 :: true
7. Stream Filter, Map, FlatMap
- Filter : 轟 譟郁唄螻 殊 覈 襯 企 襦 ろ碁殊 襴
- Map : ろ碁殊  item 覲蟆  襦 ろ碁殊 襴
List<String> address = new ArrayList<>();
address.add("語 ″蟲 覦企");
address.add("語 ″蟲 ″");
address.add("語 螳蟲 螳");
address.add("語 螳蟲 豐");
// Filter : Stream 襯  蟆  譟郁唄 襷譟燕 蟆 蟇碁る企 
// predicate<T>, 讀 T襯 語襦 覦螻 boolean 襴危  誤壱伎る 螳 
Stream<String> addressStream = address.stream();
List<String> songpa = addressStream.filter(s -> s.contains("″蟲")).collect(Collectors.toList());
songpa.stream().forEach(System.out::println);
System.out.println("=======================================");
// Map : Stream   螳れ 轟 覦朱 覲 螻 苦  
// 覲   襯 朱誤磯 覦.
List<String> tmp = address.stream().map(s->s.replaceAll("″蟲", "″")).collect(Collectors.toList());
tmp.stream().forEach(s-> System.out.println(s));
System.out.println("=======================================");
語 ″蟲 覦企
語 ″蟲 ″
=======================================
語 ″ 覦企
語 ″ ″
語 螳蟲 螳
語 螳蟲 豐
=======================================
-  螳 ろ碁殊  螳 ろ碁殊朱 豎 襦 ろ碁殊 襴
String[][] arrays = new String[][]{ {"a1", "a2"}, {"b1", "b2"}, {"c1", "c2", "c3"} };
Stream<String[]> stream4 = Arrays.stream(arrays);
Stream<String> stream5 = stream4.flatMap(s -> Arrays.stream(s));
stream5.forEach(System.out::println);
A1
A2
B1
B2
C1
C2
C3
7. Stream Concat, Distinct, Limit, Skip, Sorted
- Item  ろ碁殊朱 豺.
- 譴覲給 item 覈 蟇  襦 ろ碁殊朱 襴
- equals(), hasCode() 螳   伎 
A1
A2
B1
B2
C1
C2
C3
List<Member> memberList = Arrays.asList(new Member("1", "蠍碁"),
new Member("1", "蟾蠍語")
);
List<Address> addressList = Arrays.asList(new Address("1", "語 ″蟲"),
new Address("1", "語 螳蟲")
);
Stream<Member> streamMember = memberList.stream();
Stream<Address> streamAdress = addressList.stream();
Stream<T> streamMemberAddress = (Stream<T>) Stream.concat(streamMember, streamAdress);
streamMemberAddress.forEach(t->{
if ( t instanceof Address) {
Address a = (Address) t;
System.out.println("Address : " + a.getMemberNo() + ", Address : " + a.getAddress());
} else if (t instanceof Member) {
Member a = (Member) t;
System.out.println("MemberNo : " + a.getMemberNo() + ", MemberNm : " + a.getMemberNm());
}
});
MemberNo : 1, MemberNm : 蠍碁
MemberNo : 1, MemberNm : 蟾蠍語
Address : 1, Address : 語 ″蟲
Address : 1, Address : 語 螳蟲
List<String> asList =
Arrays.asList("蠍碁", "蟾蠍語", "蠍碁", "", "蟾蠍語");
Stream<String> stream1 = asList.stream().distinct();
stream1.forEach(System.out::println);
蠍碁
蟾蠍語

- limit : 殊 螳 襷 螳  襦 ろ碁 
- Skip : 殊  襷 item 蟇企 螻 蠏 危 item朱 ろ碁 
- Itemれ   襦 ろ碁殊 
- Comparable interface螳 蟲  伎 
List<String> langs = Arrays.asList("java", "kotlin", "haskell", "ruby", "smalltalk");
System.out.println("sorted:");
langs.stream().sorted().forEach(System.out::println);
System.out.println("reversed:");
langs.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
langs = Arrays.asList("java", "kotlin", "haskell", "ruby", "smalltalk");
System.out.println("sorted:");
langs.stream().sorted(Comparator.comparing(String::length)) .forEach(System.out::println);
System.out.println("reversed:");
langs.stream().sorted(Comparator.comparing(String::length).reversed()).forEach(System.out::println);
sorted:
haskell
java
kotlin
ruby
smalltalk
reversed:
smalltalk
ruby
kotlin
java
haskell
sorted:
java
ruby
kotlin
haskell
Smalltalk
reversed:
smalltalk
haskell
kotlin
java
ruby
8. Stream find, match, Collecting
- findfirst :  螳 豌覯讌  蟆 襴
- findAny :  蟯螻 襾殊 谿城 螳豌企ゼ 襴
List<String> elements =
Arrays.asList("a", "a1", "b", "b1", "c", "c1");
Optional<String> firstElement = elements.stream()
.filter(s -> s.startsWith("b")).findFirst();
Optional<String> anyElement = elements.stream()
.filter(s -> s.startsWith("b")).findAny();
firstElement.ifPresent(System.out::println);
anyElement.ifPresent(System.out::println);
b
b
- ろ碁殊 谿剰  螳豌願 譟伎 讌襯 boolean 朱 襴
- anyMatch : 譟郁唄 襷 螳豌願 朱 朱 true
- allMatch : 覈 螳豌願 譟郁唄 襷 true
- noneMatch : 譟郁唄 襷 螳豌願 伎 true
List<String> elementList = Arrays.asList("a", "a1", "b", "b1", "c", "c1");
boolean anyMatch = elements.stream().anyMatch(s -> s.startsWith("b"));
System.out.println("anyMatch: " + (anyMatch ? "true" : "false"));
boolean allMatch = elements.stream().allMatch(s -> s.startsWith("b"));
System.out.println("allMatch: " + (allMatch ? "true" : "false"));
boolean noneMatch = elements.stream().noneMatch(s -> s.startsWith("b"));
System.out.println("noneMatch: " + (noneMatch ? "true" : "false"));
anyMatch: true
allMatch: false
noneMatch: false
- Collectors.toList() :  蟆郁骸襯 襴ろ碁 覦
- Collectors.joining() :  蟆郁骸襯  ろ碁朱 覲
: delimiter : 螳  譴螳 れ願 襯 蟲覿 貅譯朱 蟲覿
prefix : 蟆郁骸 襷  覿 覓語
suffix : 蟆郁骸 襷 れ 覿 覓語
- Collectors.averageingInt() :  螳(Integer value ) 蠏(arithmetic mean)
- Collectors.summingInt() : 螳 (sum)
- Collectors.summarizingInt() : 螻 蠏
- Collectors.groupingBy() : 轟 譟郁唄朱 れ 蠏碁9 ->  誤壱伎
Function  伎伎 轟 螳 蠍一朱 ろ碁  れ 覓苦
- Collectors.partitioningBy() :  誤壱伎 Predicate 襯 覦給.
Predicate  語襯 覦 boolean 螳 襴
- Collectors.collectingAndThen() : 轟 朱 蟆郁骸襯 collect  危 豢螳
  蟆曙一
8. Stream find, match
public class CollectionMain {
public static void main(String[] arg) {
List<ProductInfo> productList =
Arrays.asList(new ProductInfo(1, "蠍1", 10000, "P"),
new ProductInfo(2, "覿螳1", 1000, "R"),
new ProductInfo(3, "蠍2", 20000, "P"),
new ProductInfo(4, "覿螳2", 2000, "R"),
new ProductInfo(5, "旧1", 3000, "O"));
List<String> productNmList =
productList.stream().map(ProductInfo::getProductNm).collect(Collectors.toList());
productNmList.forEach(System.out::println);
String productNmStr = productList.stream().map(ProductInfo::getProductNm).collect(Collectors.joining());
System.out.println( "productNmStr ::" + productNmStr);
productNmStr = productList.stream().map(ProductInfo::getProductNm).collect(Collectors.joining(",","[","]"));
System.out.println( "productNmStr ::" + productNmStr);
Double priceAvarag = productList.stream().filter(productInfo ->
productInfo.getProductType().equals("P")).collect(Collectors.averagingInt(ProductInfo::getPrice));
System.out.println( "priceAvarag ::" + priceAvarag);
Double allPriceAvarag = productList.stream().collect(Collectors.averagingInt(ProductInfo::getPrice));
System.out.println( "allPriceAvarag ::" + allPriceAvarag);
int sumP = productList.stream().filter(productInfo ->
productInfo.getProductType().equals("P")).collect(Collectors.summingInt(ProductInfo::getPrice));
System.out.println( "sumP ::" + sumP);
int sum = productList.stream().collect(Collectors.summingInt(ProductInfo::getPrice));
System.out.println( "sum ::" + sum);
IntSummaryStatistics sumavgP = productList.stream().filter(productInfo ->
productInfo.getProductType().equals("P")).collect(Collectors.summarizingInt(ProductInfo::getPrice));
System.out.println( "sumavgP ::" + sumavgP);
IntSummaryStatistics sumavg =
productList.stream().collect(Collectors.summarizingInt(ProductInfo::getPrice));
System.out.println( "sumavg ::" + sumavg);
HashMap groupByProduct = (HashMap)
productList.stream().collect(Collectors.groupingBy(ProductInfo::getProductType));
groupByProduct.forEach((k,v) -> {
System.out.println( "key ::" + k);
List<ProductInfo> values = (List<ProductInfo>) v;
values.forEach(productInfo -> System.out.println("Values:: " + productInfo.getProductNm()));
});
}
}
蠍1
覿螳1
蠍2
覿螳2
旧1
productNmStr ::[蠍1,覿螳1,蠍2,覿螳2,旧1]
productNmStr ::蠍1覿螳1蠍2覿螳2旧1
priceAvarag ::15000.0
allPriceAvarag ::7200.0
sumP ::30000
sumavgP ::IntSummaryStatistics{count=2, sum=30000, min=10000, average=15000.000000, max=20000}
sumavg ::IntSummaryStatistics{count=5, sum=36000, min=1000, average=7200.000000, max=20000}
key ::P
Values:: 蠍1
Values:: 蠍2
key ::R
Values:: 覿螳1
Values:: 覿螳2
key ::O
Values:: 旧1
9. Optional
- Null豌襴襯 壱蟆 螻  螳豌企 null 螳豌企ゼ  覈 螳豌企ゼ 
    wrapping  螳豌
- Optional<T> 企るゼ 伎伎 NullPointerException  覦讌  .
Optional<T> 企る  襷襦 null     螳 螳碁  企る 谿語^朱
null  殊企讌 襦 伎朱 企
- isPresent : 企 螳豌願 null 語  譴
- orElse : Optional null 蟆曙 orElse() param 襴
- orElseGet : Optional null 蟆曙 企 襯 ろ螻 蠏 ろ蟆郁骸襯 
- orElseThrow : null 蟆曙 碁ゼ 讌螻 苦  b
b
Optional optional = Optional.empty();
System.out.println( "optional :: " + optional);
System.out.println( "optional.isEmpty ::" + optional.isEmpty());
System.out.println( "optional.isPresent ::" + optional.isPresent());
TextClass textClass = new TextClass();
Optional<String> op = Optional.ofNullable(textClass.getTest());
String result = op.orElse("Other");
System.out.println( "optional result ::" + result);
textClass.setTest("Testing....");
op = Optional.ofNullable(textClass.getTest());
result = op.orElse("Other");
System.out.println( "optional set result ::" + result);
MemberAddress memberAddress = new MemberAddress();
Optional<Member> member = Optional.ofNullable(memberAddress.getMember());
Optional<String> memberNo = member.map(Member::getMemberNo);
result = memberNo.orElse("覯 ");
System.out.println( "optional member ::" + result);
result = memberNo.orElseGet(()-> new String());
System.out.println( "optional null String :: " + result);
result = memberNo.orElseThrow(CustomException::new);
optional :: Optional.empty
optional.isEmpty ::true
optional.isPresent ::false
optional result ::Other
optional set result ::Testing....
optional member ::覯 
optional null String ::
 ......
Member mm = memberAddress.getMember();
if ( mm != null) {
String mmNo = mm.getMemberNo();
if ( mmno != null) {
return result;
}
}
return "覯 ";
============================================================
Optional<Member> member = Optional.ofNullable(memberAddress.getMember());
Optional<String> memberNo = member.map(Member::getMemberNo)
return memberNo.orElse("覯 ");
www.iabacus.co.kr
Tel. 82-2-2109-5400
Fax. 82-2-6442-5409
THANKS

More Related Content

What's hot (19)

PPTX
願 覦 Chap.14 れ Lambda expression(java)(KOR)
MIN SEOK KOO
PDF
Java8 & Lambda
蠍壱
PDF
れ, 貊襴郁骸 覈語伎 轟 (Swift, Kotlin and Modern Languages)
Yongha Yoo
PDF
濠 螻 襷覲願 讀蠍磯 ろ碁 API
Arawn Park
PDF
覦8 ろ碁 API 螳
beom kyun choi
PDF
JDK 覲豌
SeungHyun Eom
PPTX
[谿, 貊襴(Kotlin) 螳譬] 5. Control Flow
PDF
Fp basic-kotlin
Myeongin Woo
PDF
覦8螳 2螳. Stream API
Sejong Park
PPTX
Java8
Jong Woo Rhee
PDF
れ 焔 危危蠍
Yongha Yoo
PPTX
(襷)願 覦 Chap.16 ろ碁&覲豌襴 Stream&parallel processing(java)
MIN SEOK KOO
PDF
Python Programming: Function
Chan Shik Lim
PDF
Swift3 generic
Eunjoo Im
PDF
10= =п 梶≡梶 =求 梶≡
PDF
Do swift: Swift 覓伎 企慨蠍
YoonBong Steve Kim
PPTX
=求メ+ 求+求≡= 20160229
Yong Joon Moon
PPTX
=求メ+Operator+求≡= 20160409
Yong Joon Moon
PDF
伎2.7 蠍一 螻給 蟆 襴
Booseol Shin
願 覦 Chap.14 れ Lambda expression(java)(KOR)
MIN SEOK KOO
Java8 & Lambda
蠍壱
れ, 貊襴郁骸 覈語伎 轟 (Swift, Kotlin and Modern Languages)
Yongha Yoo
濠 螻 襷覲願 讀蠍磯 ろ碁 API
Arawn Park
覦8 ろ碁 API 螳
beom kyun choi
JDK 覲豌
SeungHyun Eom
[谿, 貊襴(Kotlin) 螳譬] 5. Control Flow
Fp basic-kotlin
Myeongin Woo
覦8螳 2螳. Stream API
Sejong Park
Java8
Jong Woo Rhee
れ 焔 危危蠍
Yongha Yoo
(襷)願 覦 Chap.16 ろ碁&覲豌襴 Stream&parallel processing(java)
MIN SEOK KOO
Python Programming: Function
Chan Shik Lim
Swift3 generic
Eunjoo Im
10= =п 梶≡梶 =求 梶≡
Do swift: Swift 覓伎 企慨蠍
YoonBong Steve Kim
=求メ+ 求+求≡= 20160229
Yong Joon Moon
=求メ+Operator+求≡= 20160409
Yong Joon Moon
伎2.7 蠍一 螻給 蟆 襴
Booseol Shin

Similar to Java stream v0.1 (20)

PDF
2014.07.26 KSUG 讌れ 蟷 貉 碁碁 - 濠 螻 襷覲願 讀蠍磯 ろ碁 API(覦蟠)
JiandSon
PDF
, ろ碁 Api
Chi Hwan Choi
PPTX
覦 8
PDF
Java(1/4)
handfoot
PDF
Java advancd ed10
hungrok
PPTX
Just java
Jong Wook Kim
PDF
Java(3/4)
handfoot
PPTX
[HaU] 蠍一 覃伎 譴觜 java
PDF
Java(4/4)
handfoot
PPTX
Java collections framework
蟆曙
PPTX
願 覦 Chap.11 蠍磯蓋 API 企(java)(KOR)
MIN SEOK KOO
PPT
Ai C#碁碁
Astin Choi
PDF
2014.07.26 KSUG 讌れ 蟷 貉 碁碁 - ′ メ罪メ =8 =戟=求 ()
JiandSon
PPTX
Programming java day2
Jaehoonyam
PPTX
Feel functional
WonJun Lee
PDF
5= ≡梶≡
SeoYeong
PDF
Effective java
Haeil Yi
PDF
Introduction to Fork Join Framework_SYS4U I&C
sys4u
PPTX
Kth螳覦 碁碁 1
Byeongsu Kang
PDF
2023.05.01 = = : 覦 蠍一
HONG YONG JUN
2014.07.26 KSUG 讌れ 蟷 貉 碁碁 - 濠 螻 襷覲願 讀蠍磯 ろ碁 API(覦蟠)
JiandSon
, ろ碁 Api
Chi Hwan Choi
覦 8
Java(1/4)
handfoot
Java advancd ed10
hungrok
Just java
Jong Wook Kim
Java(3/4)
handfoot
[HaU] 蠍一 覃伎 譴觜 java
Java(4/4)
handfoot
Java collections framework
蟆曙
願 覦 Chap.11 蠍磯蓋 API 企(java)(KOR)
MIN SEOK KOO
Ai C#碁碁
Astin Choi
2014.07.26 KSUG 讌れ 蟷 貉 碁碁 - ′ メ罪メ =8 =戟=求 ()
JiandSon
Programming java day2
Jaehoonyam
Feel functional
WonJun Lee
5= ≡梶≡
SeoYeong
Effective java
Haeil Yi
Introduction to Fork Join Framework_SYS4U I&C
sys4u
Kth螳覦 碁碁 1
Byeongsu Kang
2023.05.01 = = : 覦 蠍一
HONG YONG JUN
Ad

More from Hyosang Hong (20)

PDF
珂皆粥喝蠍一襭.沿糸韓
Hyosang Hong
PDF
Java 覲襭
Hyosang Hong
PDF
Java 一一
Hyosang Hong
PDF
Java lambda
Hyosang Hong
PDF
Java inner class
Hyosang Hong
PDF
Java generic
Hyosang Hong
PDF
Java 蠍一
Hyosang Hong
PDF
Java extends
Hyosang Hong
PDF
Java
Hyosang Hong
PDF
Java collection
Hyosang Hong
PDF
Java class
Hyosang Hong
PDF
Spring 蟲 襭
Hyosang Hong
PDF
Map struct
Hyosang Hong
PDF
Kafka 襭 v0.1
Hyosang Hong
PDF
Jpa 貎朱Μ 襭
Hyosang Hong
PDF
Java 危危蠍 貊 20210405
Hyosang Hong
PDF
Java 讌覲伎 螳ロ 螳覦 豺
Hyosang Hong
PDF
Enum
Hyosang Hong
PDF
Spring 蟲 襭
Hyosang Hong
PDF
Map struct
Hyosang Hong
珂皆粥喝蠍一襭.沿糸韓
Hyosang Hong
Java 覲襭
Hyosang Hong
Java 一一
Hyosang Hong
Java lambda
Hyosang Hong
Java inner class
Hyosang Hong
Java generic
Hyosang Hong
Java 蠍一
Hyosang Hong
Java extends
Hyosang Hong
Java
Hyosang Hong
Java collection
Hyosang Hong
Java class
Hyosang Hong
Spring 蟲 襭
Hyosang Hong
Map struct
Hyosang Hong
Kafka 襭 v0.1
Hyosang Hong
Jpa 貎朱Μ 襭
Hyosang Hong
Java 危危蠍 貊 20210405
Hyosang Hong
Java 讌覲伎 螳ロ 螳覦 豺
Hyosang Hong
Spring 蟲 襭
Hyosang Hong
Map struct
Hyosang Hong
Ad

Java stream v0.1

  • 2. 1. Stream 蠍磯蓋 - 一一 蟲豌伎 襷♀鍵覃, 螳れ 覓苦 豌襴螻 讌 旧 豢企, ( 讀, 蠏 螻 蠍磯レ る 蠏 蟲螻 豺伎危碁ゼ 螻 螻 蟆郁骸襯 豺蠍 れ る襯 一一 覲 殊 ろ碁 殊企襴 襷♀鹸. ) - 覦一願骸 貉 朱 豌襴 . ( 讀, 覦一 貉 語ろ伎れ 螳襯 譟壱伎 蟆郁骸襯 譟壱伎 蟆郁骸襯 磯螻 螳螻給 蟆郁骸襯 詞 . ) - 覲豌襴螳 螳ロ. ( 讀, 磯襯 伎 襷 れ 觜襯願 豌襴 . ) - Stream 企至螳 覓伎 企. - Stream れ 覲願 讌 . ( れ 覿 Collection 覲願 蟇磯 ) - Stream 一一 覲語 覲蟆 讌 . ( 蟆郁骸 襦 ろ碁殊朱 覦 ) - Stream 一一 螳ロ覃 讌(Lazy)豌襴 . - Stream : Stream instance - Stream 螳螻 : 豐蠍 Stream るジ Stream朱 覲 譴螳 一 (Intermediate operations) :: Filtering, Mapping -> 伎 螻襦 讌 - Stream 蟆郁骸 : 豕譬 一(terminal operations) : 一一 讌一一磯れ ろ 螳 , 危襦 企 Stream 豌 襷ろ 磯 n 蟆郁骸 襷り鍵 蟆郁骸 - for, foreach覓語 襯 蟶朱伎 豌襴. - 覓(襦讌) 覲旧 覃 襦讌 願 貊 襷 - 譴豌 for覓 朱 企る List<String> words = new ArrayList<>(); words.add("java"); words.add("javascript"); words.add("python"); words.add("c#"); int count = 0; for ( String s : words) { if ( s.length() > 4) count++; } System.out.println("count :: " + count); long streamCnt = words.stream().filter(s->s.length()>4).count(); System.out.println("streamCnt :: " + streamCnt); 蟆郁骸 count :: 2 streamCnt :: 2
  • 3. 2. Stream - Array : Arrays.stream System.out.println("===== Stream 覲 ======="); String[] strings = new String[]{"c#", "java", "java script"}; Stream<String> stringStream = Arrays.stream(strings); stringStream.forEach(s -> System.out.println(s)); System.out.println("===== 覦一伎 谿剰鍵 ======="); Stream<String> stringStreamOfElement = Arrays.stream(strings, 1,3) ; stringStreamOfElement.forEach(s -> System.out.println(s)); ===== Stream 覲 ======= c# java java script ===== 覦一伎 谿剰鍵 java java script - Collection, List, Set : stream - 覲 豌襴 : parallelStream List<String> stringList = new ArrayList<>(); stringList.add("c"); stringList.add("java"); stringList.add("java script"); stringList.add("c++"); stringList.add("c#"); // Stream 覲 System.out.println("===== Stream 覲 ======= :: " ); Stream<String> stringStream = stringList.stream(); stringStream.forEach(s -> System.out.println(s)); System.out.println("===== parallelStream 覲 ======="); Stream<String> stringParallelStream = stringList.parallelStream(); stringParallelStream.forEach(s -> System.out.println(s)); System.out.println("==================================================="); System.out.println("*. Stream.of襯 伎 Stream "); Stream<String> streamof = Stream.of("java", "c#", "c++"); streamof.forEach(o->System.out.println(o.getClass() + "::" + o)); class java.lang.String::java class java.lang.String::c# class java.lang.String::c++ ===== Stream 覲 ======= :: c java java script c++ c# ===== parallelStream 覲 ======= java script c# c++ c java Stream<String> stream = Stream.empty(); System.out.println("stream :: " + stream.count()); System.out.println("Stream.<String>empty() 螳"); stream :: 0 Stream.<String>empty() 螳
  • 4. 2. Stream ===== Stream 覲 ======= c# java java script ===== 覦一伎 谿剰鍵 java java script System.out.println("==================================================="); System.out.println("2. builer襯 伎 螳豌 ( Object ) "); Stream<Object> objectStream = Stream.builder() .add("java") .add("c#") .add("java scaipt") .build(); objectStream.forEach(o->System.out.println(o.getClass() + "::" + o)); System.out.println("==================================================="); System.out.println("2. builer襯 伎 螳豌 ( String ) "); Stream<String> stringStream = Stream.<String>builder() .add("java") .add("c#") .add("java scaipt") .build(); stringStream.forEach(o->System.out.println(o.getClass() + "::" + o)); - 譯殊 伎襯 伎狩 Stream<String> streamGenerate = Stream.generate(()->"Echo").limit(5); streamGenerate.forEach(o->System.out.println(o.getClass() + "::" + o)); // (random number) Stream<Double> streamGenerateRandoms = Stream.generate(Math::random).limit(5); streamGenerateRandoms.forEach(o->System.out.println(o.getClass() + "::" + o)); class java.lang.String::Echo class java.lang.String::Echo class java.lang.String::Echo class java.lang.String::Echo class java.lang.String::Echo class java.lang.Double::0.4853244219582693 class java.lang.Double::0.8893768469236104 class java.lang.Double::0.6801395514026836 class java.lang.Double::0.40567815077776515 class java.lang.Double::0.23895785683876747
  • 5. 3. 蠍磯蓋 Stream - IntStream : short, char, byte, Boolean - longStream : long - doubleStream: float - IntStream る IntStream.of, Arrays,stream 覃 - IntStream.builder().build() - Arrays.stream(values. from, to ) - generate, iterate - IntStream, longStream : 蠍郁 1 覯襯 燕 range, rangeClosed IntStream zeroToNinetyNine = IntStream.range(0,100); // 100 IntStream zeroToHundred = IntStream.rangeClosed(0,100); // 100 class java.lang.Integer::50 class java.lang.Integer::55 class java.lang.Integer::60 class java.lang.Integer::65 class java.lang.Integer::70 IntStream intStream = IntStream.builder() .add(2) .add(34) .add(40) .build(); intStream.forEach(i -> System.out.println(i)); System.out.println("===================="); intStream = IntStream.of(30, 40, 50); intStream.forEach(i -> System.out.println(i)); System.out.println("===================="); int[] intArrays = new int[]{20,30,40}; intStream = Arrays.stream(intArrays, 1,3); intStream.forEach(i -> System.out.println(i)); 2 34 40 ==================== 30 40 50 ==================== 30 40 - 螳豌 Stream 蠍磯蓋 ろ碁殊朱 覲 - 蠍磯蓋 ろ碁殊 螳豌 ろ碁殊朱 覲 : boxed List<String> stringList = new ArrayList<>(); stringList.add("c"); stringList.add("java"); stringList.add("java script"); stringList.add("c++"); stringList.add("c#"); System.out.println("===== Stream 覲 ======= :: " ); Stream<String> stringStream = stringList.stream(); System.out.println("===== IntStream 覲 ======= :: " ); IntStream lenths = stringStream.mapToInt(String::length); lenths.forEach(i -> System.out.println(i)); System.out.println("===== Stream 覲 ======= :: " ); Stream<Integer> integerStream = IntStream.range(0,5).boxed(); integerStream.forEach(i -> System.out.println(i)); ===== Stream 覲 ======= :: ===== IntStream 覲 ======= :: 1 4 11 3 2 ===== Stream 覲 ======= :: 0 1 2 3 4 - toArray 蠍磯蓋 覦一伎 襴 - 旧 蟆郁骸襯 れ朱 覃 OptionalInt, OprionalLong, OptionalDouble 襴 getAsInt, getAsLong, getAsDouble - Optional function get - 蠍磯蓋 Stream 蠏, 豕螳, 豕螳 襴 sum, average, max, min - summaryStatistics覃 ろ碁殊 螻, 蠏, 豕螳, 豕螳 覲願 intSummaryStatistics, LongSummaryStatistics, DoubleSummarySatistics 蟆豌企ゼ れ
  • 6. 4. 覲 Stream - Collection.parallelStream 誤螻 谿 ろ碁(Sequential Stream) - Stream parallelStream 覃襯 伎 Stream<String> parallelStream = Stream.of(strArrays).parallelStream(); Stream<CustInfo> parallelCustInfoStream = custInfoList.parallelStream(); - 覲 覿 : isParallel - 覲 覈襦 ろ 覃 豕譬 覃(terminal method)螳 ろ 覈 讌 豌襴 譴 譴螳 ろ碁 一一 覲 :: 一磯れ 覓伎(stateless)螻 襦 ろ :: る 覲伎, race condition煙 螻 伎 List<String> stringList = new ArrayList<>(); stringList.add("c"); stringList.add("java"); stringList.add("java script"); stringList.add("c++"); stringList.add("c#"); // Stream 覲 System.out.println("===== Stream 覲 ======= :: " ); Stream<String> stringStream = stringList.stream(); stringStream.forEach(s -> System.out.println(s)); System.out.println("===== parallelStream 覲 ======="); Stream<String> stringParallelStream = stringList.parallelStream(); stringParallelStream.forEach(s -> System.out.println(s)); ===== Stream 覲 ======= :: c java java script c++ c# ===== parallelStream 覲 ======= java script c# c++ c java
  • 7. 5. Interface - 1螳 豢 覃襯 螳讌螻 誤壱伎 :: Single Abstract Method(SAM) - 伎 : 覦 れ 誤壱伎る襷 蠏 螳 蠍 覓 public class FunctionalInterace { interface FunctionalInterface { public abstract void doWork(String text); } public static void main(String[] strings) { // 給 企 FunctionalInterface func01 = new FunctionalInterface() { @Override public void doWork(String text) { System.out.println(text); } }; func01.doWork("給 企 :: 願 "); // FunctionalInterface func = text -> System.out.println(text); func.doWork(" :: 願 "); } } 給 企れ 螻牛旧 - 給企る り 碁 覦蟾 企れ 覃る 覲 覃 蠏 - 讌襷 覃る 覲 覃 襷り覲 蠏狩蠍 伎 企 覲れ final 轟煙 螳讌螻 伎 . 給 企れ 谿伎 - 給企れ れ this 覩碁 るゴ : 給企れ this 給企 螳襴れ襷 れ this 碁 企るゼ 螳襴給. - る 覲(Shadow Variable) 讌 給企れ れ this 覩碁 るゴ : 給 企る 覲襯 誤 讌襷 る 企ゼ 讌 給. - る 誤壱伎れ 覦 覃襷 螳讌螻 伎 ! : 誤壱伎れ @FunctionalInterface 企誤伎 覿企 螳 伎 豢 覃螳 碁 蟆曙 貉危 襯 覦. 誤壱伎 朱誤 襴 る Supplier<T> T T 螳 襴 Consumer<T> T void T 螳 觜 BiConsumer<T, U> T, U void T, U 螳 觜 Predicate<T> T boolean Boolean 螳 襴 ToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T> T Int long double T 螳 語襦 覦螻 Int, long, double 襴 IntFunction<T> LongFunction<T> DoubleFunction<T> Int long double R 覦螻 Int, long, double 語襦 覦螻 R 襴 誤壱伎 朱誤 襴 る Function<T, R> T R T 螳 語襦 覦螻 R 襴 BiFunction<T, U, R> T, U R T, U 語襦 覦螻 R 襴 UnaryOperator<T> T T T 一一 BinaryOperator<T> T, T T T 危 一一
  • 8. 6. 覦 蠍磯蓋 螻 Interface - Runnable : 語襯 覦讌 螻 襴願 誤壱伎 - Supplier : 語襯 覦讌 螻 T 螳豌企ゼ 襴 - Consumer : T 語襯 覦螻 襴願 : andThen 覃 螳 伎 一 Consumer襯 ろ - Function<T, R> : T 語襯 覦螻 R 螳豌企ゼ 襴 - Predicate : T 語襯 覦螻 boolean襯 襴 @FunctionalInterface public interface Runnable { public abstract void run(); } Runnable runnable = () -> System.out.println("Runnable...."); runnable.run(); Runnable.... @FunctionalInterface public interface Supplier<T> { T get(); } Supplier supplier = () -> "Supplier .... "; String str = (String) supplier.get(); System.out.println(str); Supplier .... @FunctionalInterface public interface Consumer<T> { void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; } } Consumer<String> consumer = text -> System.out.println("Consumer...." + text); Consumer<String> consumerandThen = text -> System.out.println("Consumer andThen...." + text); consumer.andThen(consumerandThen().accept("String type"); Consumer....String type Consumer andThen....String type @FunctionalInterface public interface Function<T, R> { R apply(T t); default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { Objects.requireNonNull(before); return (V v) -> apply(before.apply(v)); } default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { Objects.requireNonNull(after); return (T t) -> after.apply(apply(t)); } static <T> Function<T, T> identity() { return t -> t; } } Function<Integer, Integer> multiply = (value) -> value * 2; Integer result = multiply.apply(5); System.out.println("Function...." + result); Function<Integer, Integer> add = (value) -> value + 2; Function<Integer, Integer> addMultiply = multiply.compose(add); // add multiply result = addMultiply.apply(5); System.out.println("Function....addMultiply :: " + result); Function....10 Function....addMultiply :: 14 // Predicate Predicate..test, .and , .or, negate, isEqual, .not Predicate<Integer> predicate = (num) -> num > 10; System.out.println("Predicate.... :: " + predicate.test(5)); Predicate<Integer> predicate1 = (num) -> num < 20; System.out.println("Predicate.... 10 < num < 20 :: " + predicate.and(predicate1).test(25)); System.out.println("Predicate.... 10 < num or num < 20 :: " + predicate.or(predicate1).test(25)); Predicate.... :: false Predicate.... 10 < num < 20 :: false Predicate.... 10 < num or num < 20 :: true
  • 9. 7. Stream Filter, Map, FlatMap - Filter : 轟 譟郁唄螻 殊 覈 襯 企 襦 ろ碁殊 襴 - Map : ろ碁殊 item 覲蟆 襦 ろ碁殊 襴 List<String> address = new ArrayList<>(); address.add("語 ″蟲 覦企"); address.add("語 ″蟲 ″"); address.add("語 螳蟲 螳"); address.add("語 螳蟲 豐"); // Filter : Stream 襯 蟆 譟郁唄 襷譟燕 蟆 蟇碁る企 // predicate<T>, 讀 T襯 語襦 覦螻 boolean 襴危 誤壱伎る 螳 Stream<String> addressStream = address.stream(); List<String> songpa = addressStream.filter(s -> s.contains("″蟲")).collect(Collectors.toList()); songpa.stream().forEach(System.out::println); System.out.println("======================================="); // Map : Stream 螳れ 轟 覦朱 覲 螻 苦 // 覲 襯 朱誤磯 覦. List<String> tmp = address.stream().map(s->s.replaceAll("″蟲", "″")).collect(Collectors.toList()); tmp.stream().forEach(s-> System.out.println(s)); System.out.println("======================================="); 語 ″蟲 覦企 語 ″蟲 ″ ======================================= 語 ″ 覦企 語 ″ ″ 語 螳蟲 螳 語 螳蟲 豐 ======================================= - 螳 ろ碁殊 螳 ろ碁殊朱 豎 襦 ろ碁殊 襴 String[][] arrays = new String[][]{ {"a1", "a2"}, {"b1", "b2"}, {"c1", "c2", "c3"} }; Stream<String[]> stream4 = Arrays.stream(arrays); Stream<String> stream5 = stream4.flatMap(s -> Arrays.stream(s)); stream5.forEach(System.out::println); A1 A2 B1 B2 C1 C2 C3
  • 10. 7. Stream Concat, Distinct, Limit, Skip, Sorted - Item ろ碁殊朱 豺. - 譴覲給 item 覈 蟇 襦 ろ碁殊朱 襴 - equals(), hasCode() 螳 伎 A1 A2 B1 B2 C1 C2 C3 List<Member> memberList = Arrays.asList(new Member("1", "蠍碁"), new Member("1", "蟾蠍語") ); List<Address> addressList = Arrays.asList(new Address("1", "語 ″蟲"), new Address("1", "語 螳蟲") ); Stream<Member> streamMember = memberList.stream(); Stream<Address> streamAdress = addressList.stream(); Stream<T> streamMemberAddress = (Stream<T>) Stream.concat(streamMember, streamAdress); streamMemberAddress.forEach(t->{ if ( t instanceof Address) { Address a = (Address) t; System.out.println("Address : " + a.getMemberNo() + ", Address : " + a.getAddress()); } else if (t instanceof Member) { Member a = (Member) t; System.out.println("MemberNo : " + a.getMemberNo() + ", MemberNm : " + a.getMemberNm()); } }); MemberNo : 1, MemberNm : 蠍碁 MemberNo : 1, MemberNm : 蟾蠍語 Address : 1, Address : 語 ″蟲 Address : 1, Address : 語 螳蟲 List<String> asList = Arrays.asList("蠍碁", "蟾蠍語", "蠍碁", "", "蟾蠍語"); Stream<String> stream1 = asList.stream().distinct(); stream1.forEach(System.out::println); 蠍碁 蟾蠍語 - limit : 殊 螳 襷 螳 襦 ろ碁 - Skip : 殊 襷 item 蟇企 螻 蠏 危 item朱 ろ碁 - Itemれ 襦 ろ碁殊 - Comparable interface螳 蟲 伎 List<String> langs = Arrays.asList("java", "kotlin", "haskell", "ruby", "smalltalk"); System.out.println("sorted:"); langs.stream().sorted().forEach(System.out::println); System.out.println("reversed:"); langs.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println); langs = Arrays.asList("java", "kotlin", "haskell", "ruby", "smalltalk"); System.out.println("sorted:"); langs.stream().sorted(Comparator.comparing(String::length)) .forEach(System.out::println); System.out.println("reversed:"); langs.stream().sorted(Comparator.comparing(String::length).reversed()).forEach(System.out::println); sorted: haskell java kotlin ruby smalltalk reversed: smalltalk ruby kotlin java haskell sorted: java ruby kotlin haskell Smalltalk reversed: smalltalk haskell kotlin java ruby
  • 11. 8. Stream find, match, Collecting - findfirst : 螳 豌覯讌 蟆 襴 - findAny : 蟯螻 襾殊 谿城 螳豌企ゼ 襴 List<String> elements = Arrays.asList("a", "a1", "b", "b1", "c", "c1"); Optional<String> firstElement = elements.stream() .filter(s -> s.startsWith("b")).findFirst(); Optional<String> anyElement = elements.stream() .filter(s -> s.startsWith("b")).findAny(); firstElement.ifPresent(System.out::println); anyElement.ifPresent(System.out::println); b b - ろ碁殊 谿剰 螳豌願 譟伎 讌襯 boolean 朱 襴 - anyMatch : 譟郁唄 襷 螳豌願 朱 朱 true - allMatch : 覈 螳豌願 譟郁唄 襷 true - noneMatch : 譟郁唄 襷 螳豌願 伎 true List<String> elementList = Arrays.asList("a", "a1", "b", "b1", "c", "c1"); boolean anyMatch = elements.stream().anyMatch(s -> s.startsWith("b")); System.out.println("anyMatch: " + (anyMatch ? "true" : "false")); boolean allMatch = elements.stream().allMatch(s -> s.startsWith("b")); System.out.println("allMatch: " + (allMatch ? "true" : "false")); boolean noneMatch = elements.stream().noneMatch(s -> s.startsWith("b")); System.out.println("noneMatch: " + (noneMatch ? "true" : "false")); anyMatch: true allMatch: false noneMatch: false - Collectors.toList() : 蟆郁骸襯 襴ろ碁 覦 - Collectors.joining() : 蟆郁骸襯 ろ碁朱 覲 : delimiter : 螳 譴螳 れ願 襯 蟲覿 貅譯朱 蟲覿 prefix : 蟆郁骸 襷 覿 覓語 suffix : 蟆郁骸 襷 れ 覿 覓語 - Collectors.averageingInt() : 螳(Integer value ) 蠏(arithmetic mean) - Collectors.summingInt() : 螳 (sum) - Collectors.summarizingInt() : 螻 蠏 - Collectors.groupingBy() : 轟 譟郁唄朱 れ 蠏碁9 -> 誤壱伎 Function 伎伎 轟 螳 蠍一朱 ろ碁 れ 覓苦 - Collectors.partitioningBy() : 誤壱伎 Predicate 襯 覦給. Predicate 語襯 覦 boolean 螳 襴 - Collectors.collectingAndThen() : 轟 朱 蟆郁骸襯 collect 危 豢螳 蟆曙一
  • 12. 8. Stream find, match public class CollectionMain { public static void main(String[] arg) { List<ProductInfo> productList = Arrays.asList(new ProductInfo(1, "蠍1", 10000, "P"), new ProductInfo(2, "覿螳1", 1000, "R"), new ProductInfo(3, "蠍2", 20000, "P"), new ProductInfo(4, "覿螳2", 2000, "R"), new ProductInfo(5, "旧1", 3000, "O")); List<String> productNmList = productList.stream().map(ProductInfo::getProductNm).collect(Collectors.toList()); productNmList.forEach(System.out::println); String productNmStr = productList.stream().map(ProductInfo::getProductNm).collect(Collectors.joining()); System.out.println( "productNmStr ::" + productNmStr); productNmStr = productList.stream().map(ProductInfo::getProductNm).collect(Collectors.joining(",","[","]")); System.out.println( "productNmStr ::" + productNmStr); Double priceAvarag = productList.stream().filter(productInfo -> productInfo.getProductType().equals("P")).collect(Collectors.averagingInt(ProductInfo::getPrice)); System.out.println( "priceAvarag ::" + priceAvarag); Double allPriceAvarag = productList.stream().collect(Collectors.averagingInt(ProductInfo::getPrice)); System.out.println( "allPriceAvarag ::" + allPriceAvarag); int sumP = productList.stream().filter(productInfo -> productInfo.getProductType().equals("P")).collect(Collectors.summingInt(ProductInfo::getPrice)); System.out.println( "sumP ::" + sumP); int sum = productList.stream().collect(Collectors.summingInt(ProductInfo::getPrice)); System.out.println( "sum ::" + sum); IntSummaryStatistics sumavgP = productList.stream().filter(productInfo -> productInfo.getProductType().equals("P")).collect(Collectors.summarizingInt(ProductInfo::getPrice)); System.out.println( "sumavgP ::" + sumavgP); IntSummaryStatistics sumavg = productList.stream().collect(Collectors.summarizingInt(ProductInfo::getPrice)); System.out.println( "sumavg ::" + sumavg); HashMap groupByProduct = (HashMap) productList.stream().collect(Collectors.groupingBy(ProductInfo::getProductType)); groupByProduct.forEach((k,v) -> { System.out.println( "key ::" + k); List<ProductInfo> values = (List<ProductInfo>) v; values.forEach(productInfo -> System.out.println("Values:: " + productInfo.getProductNm())); }); } } 蠍1 覿螳1 蠍2 覿螳2 旧1 productNmStr ::[蠍1,覿螳1,蠍2,覿螳2,旧1] productNmStr ::蠍1覿螳1蠍2覿螳2旧1 priceAvarag ::15000.0 allPriceAvarag ::7200.0 sumP ::30000 sumavgP ::IntSummaryStatistics{count=2, sum=30000, min=10000, average=15000.000000, max=20000} sumavg ::IntSummaryStatistics{count=5, sum=36000, min=1000, average=7200.000000, max=20000} key ::P Values:: 蠍1 Values:: 蠍2 key ::R Values:: 覿螳1 Values:: 覿螳2 key ::O Values:: 旧1
  • 13. 9. Optional - Null豌襴襯 壱蟆 螻 螳豌企 null 螳豌企ゼ 覈 螳豌企ゼ wrapping 螳豌 - Optional<T> 企るゼ 伎伎 NullPointerException 覦讌 . Optional<T> 企る 襷襦 null 螳 螳碁 企る 谿語^朱 null 殊企讌 襦 伎朱 企 - isPresent : 企 螳豌願 null 語 譴 - orElse : Optional null 蟆曙 orElse() param 襴 - orElseGet : Optional null 蟆曙 企 襯 ろ螻 蠏 ろ蟆郁骸襯 - orElseThrow : null 蟆曙 碁ゼ 讌螻 苦 b b Optional optional = Optional.empty(); System.out.println( "optional :: " + optional); System.out.println( "optional.isEmpty ::" + optional.isEmpty()); System.out.println( "optional.isPresent ::" + optional.isPresent()); TextClass textClass = new TextClass(); Optional<String> op = Optional.ofNullable(textClass.getTest()); String result = op.orElse("Other"); System.out.println( "optional result ::" + result); textClass.setTest("Testing...."); op = Optional.ofNullable(textClass.getTest()); result = op.orElse("Other"); System.out.println( "optional set result ::" + result); MemberAddress memberAddress = new MemberAddress(); Optional<Member> member = Optional.ofNullable(memberAddress.getMember()); Optional<String> memberNo = member.map(Member::getMemberNo); result = memberNo.orElse("覯 "); System.out.println( "optional member ::" + result); result = memberNo.orElseGet(()-> new String()); System.out.println( "optional null String :: " + result); result = memberNo.orElseThrow(CustomException::new); optional :: Optional.empty optional.isEmpty ::true optional.isPresent ::false optional result ::Other optional set result ::Testing.... optional member ::覯 optional null String :: ...... Member mm = memberAddress.getMember(); if ( mm != null) { String mmNo = mm.getMemberNo(); if ( mmno != null) { return result; } } return "覯 "; ============================================================ Optional<Member> member = Optional.ofNullable(memberAddress.getMember()); Optional<String> memberNo = member.map(Member::getMemberNo) return memberNo.orElse("覯 ");