DBILITY

java lambda stream 실습 본문

java/basic

java lambda stream 실습

DBILITY 2018. 5. 27. 09:21
반응형

현재까지 조금 해봤는데,결국은 함수형 인터페이스가 핵심인가 보다.

단말연산이 시작되어야 중간연산이 실행된다.

Spark의 lazy evaluation과 같다.

중간연산의 연결들이 종료되어야 단말연산이 시작되는 수평적인 연산이 아닌

원소마다 연결해서 실행하는 수직적 연산이 실행된다. 말이 어렵다.

package com.dbility.bigdata.lambda.test;

import java.util.ArrayList;

public class Test04 {

	public static void main(String[] args) {

		Test04 T = new Test04();
		ArrayList<Book> books = new ArrayList<>();

		books.add(T.new Book("ElasticSearch In Action",50000,"라두 게오르게/매튜 리 힌만/로이 루소","에이콘"));
		books.add(T.new Book("자바 성능 튜닝",40000,"스캇 오크스","비제이퍼블릭"));
		books.add(T.new Book("카프카, 데이터 플랫폼의 최강자",45000,"고승범/공용준","책만"));
		books.add(T.new Book("시작하세요! 하둡프로그래밍",60000,"정재화","위키북스"));

		//리스트 출력
		books.forEach(x->{
			System.out.printf("%s %d %s %s\n", x.name,x.price,x.author,x.publisher);
		});

		//책값으로 조건 추가
		books.stream().filter(x->x.price>=45000).forEach(x->{
			System.out.printf("%s %d %s %s\n", x.name,x.price,x.author,x.publisher);
		});

		//책값으로 오름차순 정렬 ( java.util.Comparator<T> 사용됨 )
		books.stream().sorted((x,y)->x.getPrice()-y.getPrice()).forEach(x->{
			System.out.printf("%s %d %s %s\n", x.name,x.price,x.author,x.publisher);
		});

		//책값으로 내림차순 정렬 ( java.util.Comparator<T> 사용됨 )
		books.stream().sorted((x,y)->(x.getPrice()-y.getPrice())*-1).forEach(x->{
			System.out.printf("%s %d %s %s\n", x.name,x.price,x.author,x.publisher);
		});

		//책값 총계
		int sum = books.stream().mapToInt(x->x.price).sum();
		System.out.printf("합계 %d\n", sum);

		sum = books.stream().reduce(0,(sum3,x)->sum3+=x.price,(sum1,sum2)->sum1+sum2).intValue();
		System.out.printf("합계 %d\n", sum);

		//책값으로 최대값
		books.stream().mapToInt(x->x.price).max().ifPresent(System.out::println);
		books.stream().reduce((x1,x2)->x1.price > x2.price ? x1 : x2).ifPresent(x->{System.out.println(x.price);});

	}

	public class Book {

		private String name;
		private int price;
		private String author;
		private String publisher;

		public Book(String name, int price, String author, String publiser) {
			this.name = name;
			this.price = price;
			this.author = author;
			this.publisher = publiser;
		}

		public String getName() {
			return name;
		}

		public int getPrice() {
			return price;
		}

		public String getAuthor() {
			return author;
		}

		public String getPublisher() {
			return publisher;
		}

	}
}

 

반응형

'java > basic' 카테고리의 다른 글

java file stream word count max value  (0) 2018.06.04
generic type의 사용 이유  (0) 2018.05.28
java lambda map,reduce,filter summary  (0) 2018.05.25
java lambda  (0) 2018.05.25
maven uber-jar packaging  (0) 2018.04.30
Comments