2019/06

자바에서 한 개의 추상 메소드를 가지는 인터페이스들은 모두 람다식을 이용할 수 있다. Runnable 인터페이스도 마찬가지이다. Runnable runnable = () -> { ... }; Thread thread = new Thread(() -> { ... }); // Thread 생성자 호출 자바8부터 빈번하게 사용되는 함수적 인터페이스(functional Interface)는 java.util.function 표준 API패키지로 제공한다. java.util.function이 제공하는 functional Interface의 목적은 메소드 또는 생성자의 매개 타입으로 사용되어 람다식에 대입될 수 있다. 함수적 인터페이스는 크게 Consumer, Supplier, Function, Operator, P..
이 포스팅을 하는 이유는, MAC에 윈도우 PC 키보드를 연결하면 키보드배열이 달라서 무척 불편해서이다. 일단 차이점을 알아보자. 애플키보드 Fn / Control / Option / Command 순 (왼쪽 기준) 윈도우 키보드 Ctrl / 윈도우키 / Alt 순 여기서 윈도우 키보드를 MAC북에 연결하게 되면 다음과 같이 매핑된다. MAC Window(일반키보드) Command키 윈도우키 Option키 Alt키 맥북에서는 맨 오른쪽에 Command키가 있는데 윈도우 키보드를 연결하면 맨 오른쪽에서 한칸 왼쪽에 있는 것이 Command가 되는 것이다. (무척 헷갈림) 키보드 배열을 동일하게 설정해 보자 1. 환경설정 > 키보드 2. 보조키 3. 연결된 키보드의 매핑 순서를 변경 Option -> Com..
· Life/Life
화장실 발매트를 찾던 중 규조토가 편리하다고 하여, 집근처 롯데마트에 직행하여 규조토를 구입하였다. 잔뜩 일본말로만 써있는데, 규조토가 이거밖에없어서 구매하였다...(11,900원에 구매함) 안에는 규조토, 사포, 미끄럼방지패드? 구성되어 있다. 사포는 나중에 규조토가 더러워지거나, 흡수력이 떨어졌을 때 한번씩 갈아야할때 필요하므로 잘 보관해야한다고 한다. 규조토를 처음 꺼내면 규조토 가루같은게 묻어져나오는데, 물로한번세척하고 말린 후 사용하는 것이 좋을 것 같다. 짜잔~ 호기심에 흡수력이 얼마나 빠른지 실험해보려고, 물을 한번 부어보았다..ㅋ_ㅋ 뿌리고 정확히 10초 후 아래와 같이 변했다. 흡수력이 눈으로 보여서 참으로 신기한 실험이었다... 처음 독립해서 그런지 집에 필요한 물건을 하나 둘 씩 살수..
Stream API 에서는 커스텀하기 집계 결과물을 만드는 reduce()라는 메소드를 제공한다. (sum(), average(), count(), max(), min() 말고도 커스텀하게 사용할 경우 사용) Stream, IntStream, LongStream, DoubleStream 각 인터페이스에는 reduce() 메소드가 오버로딩 되어 있다. (매개타입 XXXOperator, 리턴 타입 OptionalXXX, int, long, double) 스트림 요소가 전혀 없을 경우 디폴트 값인 identity 매개값이 리턴된다. XXXOperator 매개값은 집계 처리를 위한 람다식 을 대입하는 곳이다. public static void main(String[] args){ List workerList =..
sum(), count(), average(), max(), min() 집계(Aggregate) 는 최종 처리 기능이며, 요소들을 처리한 후 카운팅, 합계, 평균값, 최대값, 최소값 등과 같이 하나의 값으로 산출하는 것을 말한다. => 대량의 데이터를 가공해서 축소하는 리덕션(Reduction)이라고 볼 수 있다. 스트림에서 제공하는 기본 집계 집계 메서드에서는 리턴 값으로 OptionalXXX클래스를 리턴한다. OptionalXXX는 자바8 java.util 패키지의 Optional, OptionalDouble, OptionalInt, OptionalLong 클래스타입을 말한다. (value-based class) 이 객체에서 값을 얻기 위해서는 get(), getAsDouble(), getAsInt(..
Stream API는 최종 처리 단계 특정 조건을 만족하는 요소들을 얻을 수 있도록 세가지 매칭 메소드를 제공한다. allMatch() 모든 요소들이 매개값(Predicate)으로 주어진 조건을 만족하는지 조사 anyMatch() 최소한 한 개의 요소가 주어진 조건에 만족하는지 조사 noneMatch() 모든 요소들이 주어진 조건을 만족하지 않는지 조사 public static void main(String[] args){ int[] intArr = {2, 4, 6}; boolean result = Arrays.stream(intArr) .allMatch(a -> a%2 == 0); System.out.println("2의 배수? " + result); result = Arrays.stream(intAr..
루핑(looping)은 요소 전체를 반복하는 것을 말한다. Stream API에서 루핑에 해당하는 메소드로는 peek, forEach가 존재한다. 이 둘의 차이점은 peek() 은 중간 처리 메소드이고, forEach()는 최종 처리 메소드라는 점이다. 기억해야할 점은, 중간 처리 메소드는 최종 처리 메소드가 실행되지 않으면 동작하지 않는다는 점이다. (예전 포스팅에도 적어놨음, 중간 처리 메소드는 최종 처리 메소드가 실행되기 전까지 지연(lazy) 됨) 따라서 peek()을 사용하고 최종 처리 메소드가 없으면 스트림은 동작하지 않게 된다. public static void main(String[] args){ int[] intArr = {1, 2, 3, 4, 5}; // 최종처리 메소드가 없으면 동작하..
요소가 최종 처리되기 전에 중간 단계에서 요소를 정렬해서 최종 처리 순서를 변경할 수 있다. sorted() => 객체의 Comparable 구현 방법에 따라 정렬 sorted(Comparator) => 객체를 주어진 Comparator에 따라 정렬 정렬과 관련해서 기존에 사용하고 있던 Worker 클래스를 변형하였다. Comparable 인터페이스를 구현하여, 나이(age)기준으로 오름차순으로 정렬할 수 있게 변경하였다. public class Worker implements Comparable{ private String name; private int age; public Worker(String name, int age) { super(); this.name = name; this.age = ag..
매핑(mapping)은 중간 처리 기능으로 스트림의 요소를 다른 요소로 대체하는 작업을 말한다. 1. flatMapXXX() 메소드 flatMapXXX() 메소드는 요소를 대체 하는 복수 개의 요소들로 구성된 새로운 스트림을 리턴한다. public static void main(String[] args){ List inputList1 = Arrays.asList("java8 lamda", "stream mapping"); inputList1.stream() .flatMap(data -> Arrays.stream(data.split(" "))) // 요소별로 단어를 뽑아 스트림 재생성 .forEach(System.out::println); System.out.println(); List inputList2..
필터링은 중간 처리 기능으로 요소를 걸러내는 역할을 한다. distinct(), filter() 메소드는 모든 스트림이 가지고 있는 공통 메소드이다. distinct() 중복을 제거하는 메소드로, Object.equals(Object o)가 true일 경우 동일 객체로 판단하여 제거한다. filter(Predicate ...) 매개값으로 주어진 Predicate가 true를 리턴하는 요소만 필터링한다. public static void main(String[] args){ List names = Arrays.asList("강성현", "강성현", "깡냉", "강냉", "깡냉"); names.stream() .distinct() // 중복 제거 .forEach(System.out::println); Syst..
깡냉쓰
'2019/06 글 목록