REF:Mkong.com

 

 

[Stream:  one Group ]

.stream().collet(  Collectors.groupingBy(Function.identity(),  Collectors.count() ),

 

Grouping

 Map<BigDecimal, List<Item>> groupByPriceMap = 			items.stream().collect(Collectors.groupingBy(Item::getPrice)); 
 Map<BigDecimal, Set<String>> result =                 items.stream().collect(                         Collectors.groupingBy(Item::getPrice,                                 Collectors.mapping(Item::getName, Collectors.toSet())                         )                 );
[List -> Map]
Map<String, Choice> result =     choices.stream().collect(Collectors.toMap(Choice::getName,                                               Function.identity()));
 

[2 field Grouping]

Map<String, Map<String, Long>> multipleFieldsMap = employeesList.stream()
				.collect(
					Collectors.groupingBy(Employee::getDesignation, 
                                   Collectors.groupingBy(Employee::getGender, Collectors.counting())
                 ));

 

===========================O======================

<생성>
 Optional.of(v)
 Optional.ofNullable(v or null)
 Optional.empty()
 
 

.orElse(blabla)  empty일때 값지정.

 

.map( function)  존재할때 함수실행.

 

-boolean isPresent()

내부객체가 null이 아닌지 확인한다. null이면 false를 반환한다.

 

-void ifPresent(Consumer<T>)

Consumer<T>는 함수형 인터페이스 포스팅에서 봤듯 void 추상메서드를 갖고있다. null이 아닐때만 실행된다.

 

-Optional<T> filter(Predicate<T>)

스트림은 여러 데이터를 들고있는 객체다보니 filter로 걸러지는 데이터들이 반환됐지만, Optional은 내부객체가 단일객체인만큼 해당 조건을 만족하는지만 확인하는 정도로 사용할 수 있을 것 같다.

 

-Optional<U> map(Function<T, U>)

스트림과 같다. 내부 객체를 변환하는 용도로 사용한다.

 

-T get()

내부 객체를 반환한다. 다만 내부 객체가 null이면 NPE가 발생한다. null이 아니라는 확실한 경우에만 사용을 권장한다.

 

-T orElse(T)

내부 객체를 반환한다. 내부 객체가 null이면 인자로 들어간 기본값을 반환한다.

 

-T orElseGet(Supplier<T>)

orElse()와 동일한데 orElse()가 기본값 레퍼런스를 인자로 받는다면 orElseGet()은 내부 객체가 null일때 기본값을 반환할 객체를 인자로 받는다.

 

-T orElseThrow(Supplier<U>)



출처: http://multifrontgarden.tistory.com/131 [우리집앞마당]

Posted by yongary
,