전체 글

초보 개발자의 지식 공유의 장
· 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..
중간 처리와 최종 처리 스트림 은 데이터의 필터링, 매핑, 정렬, 그룹핑 등의 중간처리 와 합계, 평균, 카운팅, 최대값, 최소값 등의 최종 처리 를 파이프라인(pipelines)으로 해결한다. 스트림 = 중간처리 + 최종처리 로 구성 파이프라인 => 여러 개의 스트림이 연결되어 있는 구조를 말함 중간 스트림이 생성될 때 바로 요소들이 중간 처리되는 것이아니라, 최종 처리가 설정(시작)되기 전까지 중간처리는 지연된다. 최종처리가 시작되면 비로소 컬렉션 요소가 하나씩 중간 스트림에서 처리되고 최종 처리까지 오게된다. public static void main(String[] args){ List list = Arrays.asList( new Member("깡냉", Member.MALE, 30), new M..
스트림의 종류 자바8에 추가된 java.util.stream 패키지를 살펴보자 https://www.developer.com/java/data/stream-operations-supported-by-the-java-streams-api.html 모든 스트림에서 사용할 수 있는 공통 메소드들은 BaseStream에 정의되어 있으며, Stream은 객체 요소를 처리하는 스트림, IntStream, LongStream, DoubleStream은 각각 기본 타입인 int, long, double 요소를 처리하는 스트림이다. 1. 컬렉션으로부터 스트림 얻기 List list = Arrays.asList("가", "나", "다"); Stream stream = list.stream(); // Collection ...
깡냉쓰
평범한 개발자 노트