티스토리 뷰
Lambda표현식
-
개요 및 특징
-
익명 inner클래스의 표현
-
함수를 간결하게 표현한 방법
-
함수나 메소드를 정의하지 않고 한 줄로 표현
-
람다 표현식을 적용할 수 있는 인터페이스는 추상 메소드가 1개인 인터페이스만 가능(추상메소드가 1개인 인터페이스를 modern자바(8버전 이후)에서는 함수형 인터페이스라 한다.)
-
-
사용방법
-
(매개변수1, 매개변수2, ... ) -> {실행명령문}
-
매개변수가 1이거나 실행명령문이 1줄이면 ()나 {}는 생략가능
-
-
익명 inner 클래스 사용
package bigdata.modernjava.test;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class JButtonTest {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setLayout(new FlowLayout());
JButton btnOk = new JButton("확인");
JButton btnCancel = new JButton("취소");
f.add(btnOk);
f.add(btnCancel);
f.setSize(300,200);
f.setVisible(true);
// 익명 inner 클래스를 정의해서 이벤트 처리
// ActionListener는 인터페이스로 직접 new로 생성하지 못한다.
// 의미는 이름이 없는 ActionListeneer의 하위클래스 정의하고 바로 생성해서
// 사용 - 재사용이 불가능
btnOk.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("확인");
}
});
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("취소");
}
});
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
-
실행
-
람다식 사용
package bigdata.modernjava.test;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class JButtonLambdaTest {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setLayout(new FlowLayout());
JButton btnOk = new JButton("확인");
JButton btnCancel = new JButton("취소");
f.add(btnOk);
f.add(btnCancel);
f.setSize(300,200);
f.setVisible(true);
// 1단계 - 어차피 ActionListener타입이므로 new ActionListener를 지운다.
// 2단계 - ActionListener메소드는 actionPerformed하나 이므로 지운다.
// 3단계 - 매개변수의 타입이 ActionEvent타입이므로 지운다.
// 4단계 - 람다표현식의 기호인 -> 를 정의하고 매개변수가 하나이므로 ()괄호를 지운다.
// 5단계 - 명령문이 한 줄이라면 {}를 지울 수 있다.
btnOk.addActionListener(e -> System.out.println("확인"));
btnCancel.addActionListener(e -> System.out.println("취소"));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
-
실행
Stream
-
컬렉션 빌더
-
병렬처리를 위한 작업
-
람다를 활용
-
Array, List, Map, Set등을 스트림으로 변환할 수 있다.
-
Stream을 List등으로 변환할 수 있다.
-
여러 데이터를 이용해서 Stream을 생성하고 지원되는 다양한 메소드를 적용할 수 있는데 원하는 작업을 바로 처리하지 않고 결과를 요청하면 바로 처리한다.
-
메소드의 종류
-
두 가지 유형의 메소드를 지원
-
Intermediate operation메소드(중간연산) : 중간단계에 해당하는 메소드
이 메소드는 Stream을 리턴하기 때문에 method chaining을 통해 어떤 작업을 처리할지 스트림에게 지시할 수 있다.
리턴 타입이 Stream인 메소드
ex) map , filter , limit, distinct, sorted, ...
-
Terminal operation메소드(최종연산) : 작업을 끝내는 메소드
ex) collect, forEach, count
-
-
package bigdata.modernjava.test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Java8Concept {
public static void main(String[] args) {
// 1:2:3:...:10 을 출력
// 1. 클래식 자바
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
StringBuffer sb = new StringBuffer();
int size = numbers.size();
for(int i=0; i<size; i++) {
sb.append(numbers.get(i));
if(i!=size-1) {
sb.append(":");
}
}
System.out.println(sb);
// 2. modern자바 (stream과 lambda)
// => 모던자바를 적용하게 되면 주로 사용하는 것이 lambda와 stream이다.
// => 코드가 읽기 편하고 병렬프로그램을 하기가 쉬워진다.
String result = numbers.stream() //스트림으로 변환
.map(String::valueOf) //하나의 타입을 다른 타입으로 매핑한다는 의미
//numbers에 저장된 값이 Integer이다.
//이 int값을 :과 연결해야 하므로 String으로
//처리하기 위해서 String result에 저장
//타입이 다르면 stream내부에서 오류가 발생하므로
//String클래스의 valueOf메소드를 호출해서
//값을 String으로 변환하겠다는 의미
.collect(Collectors.joining(":")); //map메소드를 적용하여
//만들어진 결과에 ":"을 조인하여 작업하라는 의미
System.out.println(result);
}
}
-
실행
stream 예제
-
static import
< StreamTest01.java >
package stream;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
public class StreamTest01 {
public static void main(String[] args) {
List<String> list = Stream.of(1,3,3,5,5)
.filter(i -> i>2) // 필터를 적용 i가 2보다 큰 값 고르기
.map(i -> i*2) // 변환
.map(i -> i+"")
.collect(toList());
System.out.println(list);
Set<String> set = Stream.of(1,3,3,5,5) // set:중복없음
.filter(i -> i>2) // 필터를 적용 i가 2보다 큰 값 고르기
.map(i -> i*2) // 변환
.map(i -> i+"")
.collect(toSet());
System.out.println(set);
String result = Stream.of(1,3,3,5,5)
.filter(i -> i>2) // 필터를 적용 i가 2보다 큰 값 고르기
.map(i -> i*2) // 변환
.map(i -> i+"")
.collect(joining());
System.out.println("String=>" + result);
String result2 = Stream.of(1,3,3,5,5)
.filter(i -> i>2) // 필터를 적용 i가 2보다 큰 값 고르기
.map(i -> i*2) // 변환
.map(i -> i+"")
.collect(joining(" , "));
System.out.println("String=>" + result2);
String result3 = Stream.of(1,3,3,5,5)
.filter(i -> i>2) // 필터를 적용 i가 2보다 큰 값 고르기
.map(i -> i*2) // 변환
.map(i -> i+"")
.distinct() //중복제거
.collect(joining());
System.out.println("String=>" + result3);
List<String> list2 = Stream.of(1,3,3,5,5)
.filter(i -> i>2) // 필터를 적용 i가 2보다 큰 값 고르기
.map(i -> i*2) // 변환
.map(i -> i+"")
.distinct()
.collect(toList());
System.out.println(list2);
}
}
-
결과
< StreamTest02.java >
package stream;
import java.util.Optional;
import java.util.stream.Stream;
public class StreamTest02 {
public static void main(String[] args) {
Optional<Integer> result = Stream.of(1,2,3,4,128)
.filter(i->i==128)
.findFirst();
System.out.println(result);
System.out.println(Stream.of(1,2,3,4,128)
.filter(i->i==128)
.findFirst());
System.out.println(Stream.of(1,2,3,4,128)
.filter(i-> i>=4)
.count());
Stream.of(1,2,3,4,5).forEach(i->System.out.println(i+" "));
}
}
-
결과
'JAVA' 카테고리의 다른 글
Pattern (정규표현식) (0) | 2020.10.07 |
---|---|
JAVA 설치 및 환경변수 설정 (0) | 2020.05.15 |
- Total
- Today
- Yesterday
- linux
- springboot
- aop
- 하둡
- Replacement Strategies
- Flume
- I/O Mechanisms
- Java
- Disk Scheduling
- SQL
- Spring
- Disk System
- maven
- oracle
- Free space management
- SPARK
- 빅데이터 플랫폼
- jdbc
- File Protection
- gradle
- mapreduce
- HDFS
- JSON
- hadoop
- 빅데이터
- I/O Services of OS
- Allocation methods
- vmware
- RAID Architecture
- Variable allocation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |