-
java 람다식 lamda 여러가지 응용하기Java 2020. 4. 25. 21:43반응형
1. 각종 컬렉션 활용하기.
package study.lamda;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class ex20200425_1 {public static void main(String[] args) {// 일반 문법 vs 람다 문법 비교!!!Map<String, Object> map1 = new HashMap<>();Map<String, Object> map2 = new HashMap<>();map1.put("name","일길동");map1.put("age", "19");map2.put("name", "이길동");map2.put("age", "29");List<Map<String,Object>> list = new ArrayList<>();list.add(map1);list.add(map2);System.out.println(" ");System.out.println("////////////////////////// [1] ///////////////////////////////");// 기본 list forfor (Map<String, Object> map : list) {System.out.println("default : "+map);System.out.println("default map key: "+map.get("name"));}// 출력 결과// default : {name=홍길동, age=29}// default map key: 홍길동// default : {name=임꺽정, ageSystem.out.println(" ");System.out.println("////////////////////////// [2] ///////////////////////////////");// lambda사용한 List foreach 문list.forEach(x -> {System.out.println("lamda : "+x);System.out.println("lamda map key: "+x.get("name"));});// 출력 결과// lamda : {name=홍길동, age=29}// lamda map key: 홍길동// lamda : {name=임꺽정, age=30}// lamda map key: 임꺽정Map<Integer, Object> tempMap = new HashMap<>();Map<String, Object> map3 = new HashMap<>();Map<String, Object> map4 = new HashMap<>();map3.put("name", "삼길동");map3.put("age", "39");map4.put("name", "사길동");map4.put("age", "49");// tempMap 안에 List와 Map을 담는다.tempMap.put(0, list);tempMap.put(1, map3);tempMap.put(2, map4);System.out.println(" ");System.out.println("////////////////////////// [3] ///////////////////////////////");System.out.println("tempMap: "+tempMap);// 출력 결과// tempMap: {// 0=[// {name=일길동, age=19}, {name=이길동, age=29}// ],// 1={name=삼길동, age=39},// 2={name=사길동, age=49}// }System.out.println(" ");System.out.println("////////////////////////// [4] ///////////////////////////////");// lambda 사용한 Map foreach// for문for(int i=0; i< tempMap.size(); i++) {System.out.println("tempMap.get(0) : "+tempMap.get(0));}// 출력 결과// tempMap.get(0) : [{name=일길동, age=19}, {name=이길동, age=29}]// tempMap.get(0) : [{name=일길동, age=19}, {name=이길동, age=29}]// tempMap.get(0) : [{name=일길동, age=19}, {name=이길동, age=29}]// foreach문 - keySet사용System.out.println(" ");System.out.println("////////////////////////// [5] ///////////////////////////////");for ( Integer key : tempMap.keySet() ) {System.out.println(" key : "+key );System.out.println("tempMap.get(key : "+tempMap.get(key));}// 출력 결과// key : 0// tempMap.get(key : [{name=일길동, age=19}, {name=이길동, age=29}]// key : 1// tempMap.get(key : {name=삼길동, age=39}// key : 2// tempMap.get(key : {name=사길동, age=49}// foreach문 - entrySet사용System.out.println(" ");System.out.println("////////////////////////// [6] ///////////////////////////////");System.out.println("entry.getKey() : "+entry.getKey());System.out.println("entry.getValue() : "+entry.getValue());}// 출력 결과// entry.getKey() : 0// entry.getValue() : [{name=일길동, age=19}, {name=이길동, age=29}]// entry.getKey() : 1// entry.getValue() : {name=삼길동, age=39}// entry.getKey() : 2// entry.getValue() : {name=사길동, age=49}// lambda 사용한 foreach문System.out.println(" ");System.out.println("////////////////////////// [7] ///////////////////////////////");tempMap.forEach((k,v) ->{System.out.println("key : "+k);System.out.println("v : "+v);});// 출력 결과// key : 0// v : [{name=일길동, age=19}, {name=이길동, age=29}]// key : 1// v : {name=삼길동, age=39}// key : 2// v : {name=사길동, age=49}// lambda 사용한 foreach문System.out.println(" ");System.out.println("////////////////////////// [8] ///////////////////////////////");tempMap.forEach((k,v) -> System.out.println("key : "+k +" v : "+ v));//출력결과// key : 0 v : [{name=일길동, age=19}, {name=이길동, age=29}]// key : 1 v : {name=삼길동, age=39}// key : 2 v : {name=사길동, age=49}}}2. lambda 로 interface와 추상메소드 호출 / lambda 사용하여 List Stream Method
package study.lamda;import java.util.ArrayList;import java.util.List;public class ex20200425_2 {public static void main(String[] args) {// 람다 사용한 인터페이스 메소드 호출 1func1((i, j)->{return i * j;});// output : 20000// 람다 사용한 인터페이스 메소드 호출 2myInterface2 addExp1 = (int a, int b) -> a + b;myInterface2 addExp2 = (int a, int b) -> { return a + b; };myInterface2 sub = (int a, int b) -> a - b;int result = addExp1.calc(1, 2) + addExp2.calc(1, 2) + sub.calc(-5, 5); // 6 - 10 = -4System.out.println("/////////////////////////////////////////");System.out.println("result : "+result);// output : -4// lambda 사용하여 쓰레드 호출new Thread(new Runnable() {@Overridepublic void run() {System.out.println("/////////////////////////////////////////");System.out.println("As-Is Thread Runnable Define");}}).start();new Thread(()->{System.out.println("/////////////////////////////////////////");System.out.println("To-be Thread Lambda Express");}).start();// lambda 사용하여 List Stream MethodList<Integer> list = new ArrayList<>();for(int i=0; i<=4; i++) {list.add(i);}// 스트림list.stream();// stream 요소 반복System.out.println("stream 요소 반복");System.out.println("/////////////////////////////////////////");// 0 1 2 3 4// stream 요소를 연산가능하게 함System.out.println("stream 요소를 연산가능하게 함");System.out.println("/////////////////////////////////////////");list.stream().map(i -> i*i).forEach(System.out::println);// 0 1 4 9 16// stream 요소의 인덱스까지 제한함System.out.println("stream 요소의 인덱스까지 제한함");System.out.println("/////////////////////////////////////////");list.stream().limit(1).forEach(System.out::println);// 0// stream 요소의 인덱스를 생략System.out.println("stream 요소의 인덱스를 생략");System.out.println("/////////////////////////////////////////");list.stream().skip(1).forEach(System.out::println);// 1 2 3 4// stream 요소를 조건문과 비교하여 필터System.out.println("stream 요소를 조건문과 비교하여 필터");System.out.println("/////////////////////////////////////////");list.stream().filter(i-> i<=1).forEach(System.out::println);// 0 1// stream 단일요소 반환 0+1+2+3+4System.out.println("stream 단일요소 반환 0+1+2+3+4");System.out.println("/////////////////////////////////////////");list.stream().reduce((a,b)-> a+b).get();// 10}// 람다식을 위한 인터페이스에서 추상 메소드는 단 하나여야 한다.// 어노테이션을 사용함으로써 추상메소드를 1개만 선언할수 있게 제한함.@FunctionalInterfacepublic interface myInterface1{public int compareMethod(int value1, int value2);}@FunctionalInterfacepublic interface myInterface2 {public int calc(int a, int b);}public static void func1(myInterface1 myinterface1){int value1 = 100;int value2 = 200;int finalValue = myinterface1.compareMethod(value1, value2);System.out.println("finalValue : "+ finalValue);}}본문의 출처 https://shlee0882.tistory.com/100
반응형'Java' 카테고리의 다른 글
[java] @SuppressWarnings 란? (0) 2022.02.20 자바 예외(Exception) 및 예외 처리 개념 (0) 2020.05.26 Java 람다식(Lambda Expressions) 이란? (0) 2020.04.18 [Java] 기초 - Java 제어자(modifier), 접근 제어자(access modifier) (0) 2017.12.12 [Java] 게시판 페이징(Paging) 로직 (0) 2017.12.12