본문 바로가기

IT57

Java8 스트림(Stream)연산을 사용해보자 Stream(스트림)연산컬렉션을 처리할때 보통은 요소들을 첨부터 끝까지 순회하면서 각 요소를 대상으로 작업한다. 하지만, Java8 부터는 스트림연산을 통해 반복하지 않아도 된다.List word;int count = 0;for(String w : words){ // 일반 방식 if(w.length() > 12) { count++; }}long count = words.stream().filter(w -> w.length() > 12).count(); // 스트림스트림은 데이터를 변환하고 추출할수있어서 겉으로는 컬렉션과 유사해보이지만 큰 차이점이 있다.스트림은 요소들을 보관하지않는다. 요소들은 하부의 컬렉션에 보관되거나 필요할때 생성된다.스트림 연산은 원본을 변경하지않는다. 대신 결과를 담은 새로운 스.. 2022. 1. 23.
Java8 람다(Lambda)를 사용해보자 Lambda 메서드를 간단한 식으로 표현하는 방법 다른언어들은 자바와 다르게 함수자체를 파라미터로 보낼 수 있지만, 자바는 객체지향언어이므로 함수자체를 보낼수없어서 그 함수를 포함한 객체를 만들고 그 객체를 보내야 하는 불편함이 있었다. class ABC implements Compatrator{ public int compare(String first, String second){ // {return a + b;}; (a, b) -> a+b; 한줄로 처리되는 바디는 {}로 감쌀필요가 없다. 여러줄로 처리되어야하는 바디는 {}로 감싼다. {}를 사용할때는 return문을 명시적으로 써줘야한다. 기본적으로 람다파라미터에는 타입을 명시해주는게 맞지만, 유추가 가능할경우에는 타입명을 생략가능하다. 타입유추가 .. 2022. 1. 23.
Java8 옵셔널(Optional<T>)객체 올바르게 사용하기 Optional Optional 객체는 T타입 객체 또는 객체가 없는 경우의 래퍼다. T타입일수도있고 null일수도있을때 쓰는 표현이다. optional은 객체 또는 null을 가리키는 T타입 레퍼런스보다 안전한 대안으로 만들어졌다. 하지만 올바르게 사용할 경우에만 안전하다. (Optional을 제대로 사용하려면, Optional을 최대 1개의 원소를 가지고 있는 특별한 Stream이라고 생각하면 편하다.) get메서드는 감싸고있는 요소가 존재할때만 요소를 얻고, 그렇지않으면 NoSuchElementException을 던진다. Optional val = ...; val.get().someMethod(); // v.처리); val.ifPresent(v -> list.add(v)); // 리스트에 해당값을 .. 2022. 1. 23.