자바 8 기능 인터페이스 상세한 튜토리얼

새로운 새 바이트 = AY는 [사항 Array.length 일]
에 대해 INT (I = 0; I는 <사항 Array.length 수, I는 ++) {
transformedArray [I] = function.applyAsByte (배열 [I])
}
transformedArray를 반환;
}
. (1)
(2)
. (3)
. (4)
. 5
. 6
. 7
여기에 2를 곱한 바이트 배열을 변환하는 방법을 간단한 어레이 테스트 :

단편 [] 배열 = {(단편 1), (짧은) 2, (짧은) 3..}
바이트 [] transformedArray = transformArray (어레이, S -> (바이트) (S * 2));

바이트 [] expectedArray = { (바이트) 2 (바이트) 4 (바이트)} (6);..
assertArrayEquals (expectedArray, transformedArray)
. (1)
(2)
. 3
. 4
. 5
이진 함수 인터페이스
개의 파라미터와 람다 식 우리 키워드 비스무트를 포함하는 이름을 사용해야 기능 인터페이스 : BiFunction, ToDoubleBiFunction, ToIntBiFunction 및 ToLongBiFunction.

BiFunction 두 일반 파라미터하고 값을 리턴하고, 다른 유사한 기능 및 인터페이스 ToDoubleBiFunction 기본 유형을 리턴 할 수있다.

전형적인 예가되는 맵 값을 사용하여 계산 된 값을 모두 교체 이진 람다 JDK Map.replaceAll의 방법을 이용하여 표현된다. BiFunction는 다음 키를 수신하고, 대체 값이 소요되며 새로운 값을 계산 반환 사용하여 구현 :

새로운 새로운지도 <문자열, 정수> 연간 관계 = HashMap의 <> ();
salaries.put ( "존", 40000);
salaries.put ( "프레디", 30000);
salaries.put ( "사무엘", 50000);

연간 관계. 완전히 대체 ((이름, oldValue입니다) ->
name.equals ( "프레디") oldValue입니다 :? oldValue입니다 + 10000)
. (1)
(2)
. 3
. 4
. 5
. 6
. 7
공급자 인터페이스 함수
매개 변수없이 공급 인터페이스는 다른 특수 형태이다. 지연 생성을위한 일반적인 값. 예를 들어, 두 배의 가치가 사각형 함수의 정의. 그것은 오히려 값 Supperlier으로, 값을받지 않습니다

더블 squareLazy 공개 (공급 <더블> LazyValue를) {
Math.pow (lazyValue.get (), 2)를 반환;
}
. (1)
(2)
. (3)
상기 지연 함수의 값을 달성 공급자를 사용하여 생성 될 수있다. 이것은 값을 생성하는 데 걸리는 시간이 많이 매우 유용합니다. 구아바 방법 sleepUninterruptibly 다음 시뮬레이션 사용 :

공급 <더블> LazyValue를 = () -> {
Uninterruptibles.sleepUninterruptibly (1000 TimeUnit.MILLISECONDS)
9D 반환;
};

더블 valueSquared = squareLazy (LazyValue를가)
. (1)
(2)
. 3
. 4
. 5
. 6
의 또 다른 사용 시나리오가 정의 공급 스트림 로직 시퀀스를 생성. 설명하기 위해, 우리는 정적 Stream.genernate 피보나치 숫자 흐름을 작성하는 방법을 사용하십시오

INT [] = {0 FIB를 ,. 1}
스트림 <정수> = Stream.generate 피보나치 (() -> {
INT 결과 = FIB를 [1.]
[. 1] INT fib3의 FIB = [0] + FIB를,
FIB를 [0 = FIB를 [1].
FIB를 [1] = fib3].
반환 결과;
})
. (1)
(2)
. 3
. 4
. 5
. 6
. 7
. 8
Stream.generate 함수 공급 업체로의 인터페이스 함수를 전달하는 방법을 구현 하였다. 공급자 인터페이스는 일반적으로 어떤 외부 함수 상태를 요구, 그 주 유용한 빌더가 될 수 있습니다. 본 실시 예에서는, 마지막 두 피보나치 수 자릿수에 의해 그 상태.
모든 외부 변수 최종이어야 람다 식에 사용하기 때문에,이 상태를 달성하기 위하여, 우리는, 배열보다는 변수 세트를 사용한다.

기타 특수 기능 인터페이스는 각각의 유형 공급 업체 BooleanSupplier, DoubleSupplier, LongSupplier 및 IntSupplier, 반환을 포함 원시 유형입니다.

소비자 인터페이스 기능
및 공급 콘트라스트 소비자 인터페이스는 일반 변수하지만 리턴 값을 수신한다. 이 함수는 (파라미터를 수정하기 때문에, 람다 식의 매개 변수를 수정할 수 없다) 대표적 부작용이다.

예를 들어, 목록에있는 각 이름에 대한 콘솔 인사말에 출력 될 수 있도록. 람다 식 List.forEach 소비자 함수 인터페이스 방법의 구현을 통과 :

목록 <문자열> = Arrays.asList 이름 ( "존", "프레디", "사무엘");
names.forEach (이름 ->에서 System.out.println (이하 "안녕하세요,"+ 이름))
. (1)
2는
또한 특정 버전이 소비자 - DoubleConsumer, IntConsumer 및 LongConsumer는 기본 유형 값은 인자로 받았다. 더욱 흥미로운 하나 개의 시나리오는 항목의 반복 맵, BiConsumer 포트입니다 :

지도 <문자열, 정수> = 새 새 불합리성의 HashMap <> ();
ages.put ( "존", 25);
ages.put ( "프레디", 24);
ages.put ( "사무엘", 30)

은 AGEs. 대해 forEach ((이름, 나이) ->에서 System.out.println (이름 +는 + 나이 + "올드 년") "입니다");
1.
2
3.
4.
5.
6.
다른 인터페이스는 각각 특별한 BiConsumer ObjDoubleConsumer, ObjIntConsumer, ObjLongConsumer의 집합입니다 두 개의 매개 변수, 수신 한 일반이고 다른 기본 유형이다.

함수 인터페이스 술어
수학적 논리는 술어 값을 수신하고, 부울 값을 반환하는 함수이다. 술어 기능 인터페이스는 부울을 반환, 제네릭 형식의 값을받는 특수 기능 인터페이스입니다. 전형적인 시나리오는 필터 값들의 집합이다 :

목록 <문자열> 이름 = Arrays.asList ( "안젤라", "아론", "밥", "클레어", "데이비드");

목록 <문자열> namesWithA = names.stream ()
.filter (이름 -> 이름입니다. startsWith ( "A"))
.collect (Collectors.toList ())
. (1)
(2)
. 3
. 4
. 5
위의 코드에서, 우리는 (A)의 시작 부분에 API 여과 유량 값 이름 목록을 사용하여, 술어 논리 코드, 즉 여과 구현. 앞의 예, IntPredicate, DoublePredicate LongPredicate 여러 인터페이스 및 염기 형 수신기 등을 포함한다.

작업자 인터페이스 기능
운영자 인터페이스 기능 인터페이스는 특별한 경우, 반환 형식이며, 같은를받습니다. UnaryOperator 인터페이스는 모든 값의 교체리스트 컬렉션 API 애플리케이션이 동일한 타입의 계산 값을 사용하는 단일 매개 변수를 수신한다 :

목록 <문자열> = Arrays.asList 이름 ( "밥", "조쉬", "메간");
names.replaceAll (이름 -> name.toUpperCase ())
. 1
2
List.replaceAll 기능 무효 반환 형식, 그것은 대체되기 때문에 특정 위치의 값. 이 목적을 달성하기 위해,리스트 변환 람다 값은 레퍼런스 결과의 동일한 유형을 리턴해야한다. 즉 여기 왜 UnaryOperator가 유용합니다. 물론이 방법은 대신에 기준 람다 수 :

names.replaceAll합니다 (를 toUpperCase :: 문자열)
. 1
가장 흥미로운 사용 사례에 BinaryOperator 인터페이스는 작업을 줄일 수있다. 상기 정수 값의 세트를 계산하는 단계를 포함하는 방법. 사용 스트림 API를 달성 할 수 있지만, 더 일반적인 방법은 방법의 사용을 줄이는 것입니다 :

목록 <정수> = Arrays.asList 값 (3 ,. 5 ,. 8 ,. 9, 12이다.)

의 INT values.stream = SUM ()이 감소 (0, (I1, I2) -> I1 + I2);
1.
2
3.
줄이거 초기 축적 값 BinaryOperator 함수 인터페이스를 수신하는 방법. 인터페이스 매개 변수는 동일한 타입의 값의 쌍이고, 모두 함수의 논리적 접속이 동일한 타입의 값을 달성 칭한다 포함한다. 바인딩은 함수로 전달되어야한다, 즉, 관계없이 다음과 같은 조건을 만족한다 한 순서 가치 계산 :

op.apply (A, op.apply (B, C)) == op.apply (op.apply (A, B), C)
. 1
결합 기능 이러한 병렬 컴퓨팅 BinaryOperator 쉽게있다. 물론, UnaryOperator 및 BinaryOperator의 기본 유형 차례로 DoubleUnaryOperator, IntUnaryOperator, LongUnaryOperator, DoubleBinaryOperator라는 IntBinaryOperator 및 LongBinaryOperator을.

전통적인 기능 인터페이스는
자바 8로부터의 모든 기능 인터페이스. 인터페이스 기능의 이전 버전의 조건을 충족하는 다수의 인터페이스는 람다 식으로 사용될 수있다. 전형적인 예에서는 API 호출 가능하고 Runnable를 병렬 인터페이스이다. 자바 8 이러한 인터페이스 라벨링 동시 코드를 만든다 @FunctionalInterface이 크게 단순화 사용 :

스레드가 스레드로부터 새로운 새 = 스레드 (() ->에서 System.out.println ( "다른 스레드 상기 헬로 가입일"));
Thread.start ()
. 1
2
요약
우리가 다른 인터페이스 람다 식로서의 기능을 제공하는 본원에 기술 된 자바 API, 예로서 응용 프로그램 시나리오를 설명합니다.
--------------------- 

추천

출처www.cnblogs.com/ly570/p/10954610.html