Programming/Java

Programming/Java

Java Stream Sum

Integer List numbers = Arrays.asList(1, 2, 3, 4, 5); // Stream의 reduce 이용 Integer sum1 = numbers.stream().reduce(0, Integer::sum); // IntStream의 sum 이용 int sum2 = numbers.stream().mapToInt(i -> i).sum(); String LIst numbers = Arrays.asList("1", "2", "3", "4", "5"); // IntStream의 sum 이용 int sum = numbers.stream().mapToInt(i -> Integer.parseInt(i)).sum();

Programming/Java

[Java] Optional API

11. Optional API Optional 만들기 Optional.of() value가 null인 경우 NullPointerException을 던집니다. 반드시 값이 있어야 하는 객체인 경우 해당 메서드를 사용하면 됩니다. Throws: NullPointerException – if value is null public static Optional of(T value) { return new Optional(Objects.requireNonNull(value)); } Optional optional = Optional.of("String"); Optional.ofNuallable() value가 null인 경우 비어있는 Optional을 반환합니다. 값이 null일수도 있는 것은 해당 메서드를 사용하..

Programming/Java

[Java] Stream API

8. Stream 소개 Stream sequence of elements supporting sequential and parallel aggregate operations 데이터를 담고 있는 저장소(컬렉션)이 아니다. Functional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다. 스트림으로 처리하는 데이터는 오직 한번만 처리한다. 무제한일 수도 있다. (Short Circuit 메소드를 사용해서 제한할 수 있다.) 중개 오퍼레이션은 근본적으로 lazy 하다. 손쉽게 병렬 처리할 수 있다. 스트림 파이프라인 0 또는 다수의 중개 오퍼레이션 (intermediate operation)과 한개의 종료 오퍼레이션 (terminal operation)으로 구성한다. 스트림의 데이터 소..

Programming/Java

[Java] 스트림 API - 01

스트림이란? JDK 8에서 추가된 Stream API에 대해서 알아보자.(파일 I/O에서 사용되는 스트림과는 다르다.)스트림은 데이터소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서들을 정의해 놓았다. 데이터소스를 추상화하였다는 것은, 데이터 소스가 무엇이든 같은 방식으로 다룰 수 있게 되었다는 것과 코드의 재사용성이 높아진다는 것을 의미한다. Stream 가공하기(중간연산) 생성한 Stream 객체에서 요소들을 가공하기 위해서 중간 연산이 필요하다. [Filter - 필터링] Filter는 Stream에서 조건에 맞는 데이터만을 정제하여 더 작은 컬렉션을 만들어내는 연산이다. Java에서는 filter 함수의 인자로 함수형 인터페이스 Predicate를 받고 있기 때문에, boolean을 반환하..

Programming/Java

[Java] - 7. 자바 8 API의 기본 메서드와 스태틱 메소드

자바 8에서 추가한 기본 메소드로 인한 API 변화 Iterable의 기본 메소드 forEach() spliterator() List name = new ArrayList(); name.add("young"); name.add("whiteship"); name.add("toby"); name.add("foo"); name.forEach(System.out::println); Spliterator spliterator = name.spliterator(); while (spliterator.tryAdvance(System.out::println)); young whiteship toby foo young whiteship toby foo Collection의 기본 메서드 stream() / parallel..

Programming/Java

[Java] - 6. 인터페이스 기본 메소드와 스태틱 메소드

6. 인터페이스 기본 메소드와 스태틱 메소드 기본 메소드 (Default Method) 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다. 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다. 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것. (@implSpec 자바 태그 사용) Object가 제공하는 기능(equals, hasCode)는 기본 메소드로 제공할 수 없다. 구현체가 재정의해야 한다. 본인이 수정할 수 있는 인터페이스에만 기본 메소드 제공할 수 있다. 인터페이스를 상속받는 인터페이스에서 다시 추상 메소드로 변경할 수 있다. 인터페이스 구현체가 재정의 할..

Programming/Java

[Java] - 5. 메소드 레퍼런스

5. 메소드 레퍼런스 람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메소드 참조하는 방법 스태틱 메소드 참조 타입::스태틱 메소 특정 객체의 인스턴스 메소드 참조 객체 레퍼런스::인스턴스 메소드 임의 객체의 인스턴스 메소드 참조 타입::인스턴 메소드 생성자 참조 타입:new 메소드 또는 생서앚의 매개변수로 람다의 입력값을 받는다. 리턴값 또는 생성한 객체는 람다의 리턴값이다. public class Greeting { private String name; public Greeting() { } public Greeting(String name) { this.name = name; } public String getName() { ..

Programming/Java

[Java] - 4. 람다 표현식

4. 람다 표현식 람다 (인자 리스트) -> {바디} 인자 리스트 인자가 없을 때: () 인자가 한개일 때: (one) 또는 one 인자가 여러개 일 때: (one, two) 인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시할 수도 있다. (Integer one, Integer two) 바디 화살표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 {}를 사용해서 묶는다. 한 줄인 경우에 생략 가능, reutrn도 생략 가능. 변수 캡처 (Variable Capture) 로컬 변수 캡처 final이거나 effective final인 경우에만 참조할 수 있다. 그렇지 않을 경우 concurrency 문제가 생길 수 있어서 컴파일러가 방지한다. effective final 이것도 역시 자바 ..

rw-
'Programming/Java' 카테고리의 글 목록