자바 - 자바 8 추가 기능 설명 (Predicate 와 Stream)
42027 단어 자바 핵심 기술
Predicate 인터페이스 소개
Predicate 는 함수 식 인터페이스 로 Lambda 표현 식 을 매개 변수 로 사용 할 수 있 습 니 다.자바 8 은 집합 Collection 에
removeIf(Predicate filter)
방법 을 추가 하여 filter 조건 에 맞 는 모든 요 소 를 대량으로 삭제 할 수 있 습 니 다.Predicate 인터페이스 사용 사례
Collection 을 테스트 하 는
removeIf()
방법.예제 1) 실행 클래스:public class DemoApplication {
public static void main(String[] args) {
//
Collection collection = new HashSet();
//
collection.add("book01");
collection.add("book02");
collection.add("book03");
collection.add("b05");
collection.add("b06");
Collection collectionNew = new HashSet();
// Lambda
collection.forEach(str -> collectionNew.add(str));
System.out.println("collectionNew: " + collectionNew);
// Lambda ( Predicate)
collection.removeIf(filter -> ((String)filter).length() < 5);
// Lambda
collection.forEach(str -> System.out.println(str));
}
}
2) 실행 결과:
collectionNew: [book02, book01, b05, book03, b06]
book02
book01
book03
상기 결과 에서 우 리 는 Collection 집합 을 호출 하 는
removeIf()
방법 을 볼 수 있 습 니 다. 조건 에 맞 는 길이 가 5 보다 작은 집합 요 소 를 대량으로 걸 러 낼 수 있 습 니 다. 프로그램 은 Lambda 표현 식 에 들 어가 서 걸 러 낼 수 있 습 니 다. collection.removeIf(filter -> ((String)filter).length() < 5);
예시 2 Predicate 인 터 페 이 스 를 사용 하 는 boolean test(T t);
방법 1) 도구 클래스 만 들 기:import java.util.Collection;
import java.util.function.Predicate;
/**
* @author andya
* @create 2020-03-24 14:08
*/
public class PredicateUtil {
public static int countCollectionElement(Collection collection, Predicate predicate){
int total = 0;
for (Object object : collection) {
// Predicate test()
if (predicate.test(object)) {
total ++;
}
}
return total;
}
}
2) 실행 클래스:
public class DemoApplication {
public static void main(String[] args) {
//
Collection collection = new HashSet();
//
collection.add("book_java ");
collection.add("book_c++ ");
collection.add("book_java ");
collection.add("book_ ");
collection.add("book01");
collection.add("book02");
Collection collectionNew = new HashSet();
// Lambda
collection.forEach(str -> collectionNew.add(str));
System.out.println("collectionNew: " + collectionNew);
System.out.println(" java :" +
PredicateUtil.countCollectionElement(collection, ele -> ((String)ele).contains("java")));
System.out.println(" 7 :" +
PredicateUtil.countCollectionElement(collection, ele -> ((String)ele).length() < 7));
System.out.println(" book_ :" +
PredicateUtil.countCollectionElement(collection, ele -> ((String)ele).startsWith("book_")));
}
}
3) 실행 결과:
collectionNew: [book02, book01, book_java , book_java , book_ , book_c++ ]
java :2
7 :2
book_ :4
『 8195 』 는 하나의
countCollectionElement()
방법 을 정의 하고 Predicate 동적 전 삼 을 사용 하여 모든 집합 요소 가 여과 조건 에 부합 되 는 지 판단 합 니 다.Stream 흐름 식 인터페이스
Stream 흐름 식 인터페이스 소개
Java 8 의 새로운 기능 에는 Stream, IntStream, DoubleStream, LongStream 등 API 도 추가 되 었 습 니 다.모든 스 트림 API 는 Stream. Builder, IntStream. Builder, DoubleStream. Builder, LongStream. Builder 등 해당 하 는 Builder 도 제공 합 니 다.
스 트림 사용 절차
builder()
클래스 방법 으로 Stream 에 대응 하 는 Builder 클래스 를 만 듭 니 다.add()
방법 으로 흐름 에 여러 요 소 를 추가 합 니 다.build()
방법 으로 해당 하 는 Stream 가 져 오기;스 트림 사용 예시
public class DemoApplication {
public static void main(String[] args) {
// xxxStream builder() Builder
IntStream intStream = IntStream.builder()
.add(1)
.add(-2)
.add(3)
.add(10)
.build();
// ( , , )
System.out.println("intStream : " + intStream.max().getAsInt());
System.out.println("intStream : " + intStream.min().getAsInt());
System.out.println("intStream : " + intStream.average());
System.out.println("intStream : " + intStream.sum());
System.out.println("intStream : " + intStream.count());
System.out.println("intStream 10: "
+ intStream.anyMatch(ele -> ele * ele > 10));
System.out.println("intStream 10: "
+ intStream.allMatch(ele -> ele * ele * ele > 10));
// 1 Stream
IntStream intStreamNew = intStream.map(ele -> ele + 1);
intStreamNew.forEach(ele -> System.out.println(ele));
}
}
실행 결과: 상기 집합 방법의 모든 실행 결 과 를 한 안에 넣 고 보 여 줍 니 다. 사실은 한 가지 만 수행 할 수 있 습 니 다.
intStream : 10
intStream : -2
intStream : OptionalDouble[3.0]
intStream : 12
intStream : 4
intStream 10: true
intStream 10: false
2
-1
4
11
상기 예제 에 두 가지 집적 방법 이 존재 한다. '중간 방법' 과 '말단 방법' 이다.
map()
방법 은 반환 값 이 다른 흐름 입 니 다.sum()
방법 이 실 행 된 후에 흐름 은 사용 할 수 없다. 만약 에 다시 사용 하면 잘못 보고 할 수 있다 Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
중간 방법
filter(Predicate predicate)
: 필터 Stream 에서 predicate 필터 조건 에 부합 되 지 않 는 요소 입 니 다.mapToXxx(ToXxxFunction mapper)
: ToXxFunction 을 사용 하여 대류 중의 요 소 를 1 대 1 로 전환 합 니 다. 방법 은 새로운 흐름 에 ToXxFunction 전환 이 생 성 된 모든 요 소 를 포함 하고 있 습 니 다.peek(Consumer action)
: 각 요 소 를 순서대로 조작 하고 돌아 오 는 흐름 은 기 존 흐름 과 같은 요 소 를 포함 하여 디 버 깅 에 사용 합 니 다.distinct()
: 흐름 에 중복 되 는 모든 요 소 를 정렬 하고 상태 가 있 는 방법;sorted()
: 흐름 속 의 요소 가 후속 방문 에서 질서 있 는 상태 에 있 는 것 을 확보 하 는 데 사용 되 는 것 도 상태 가 있 는 방법 이다.limit(long maxSize)
: 이 흐름 에 대한 후속 방문 에서 최대 접근 이 허용 되 는 요소 의 개 수 를 확보 하 는 데 사용 되 며 상태 적 이 고 단락 적 인 방법 입 니 다.말단 방법
forEach(Consumer action)
: 흐 르 는 모든 요 소 를 옮 겨 다 니 며 action 을 수행 합 니 다.toArray()
: 흐름 속 의 모든 요 소 를 하나의 배열 로 변환 합 니 다.reduce()
: 특정한 조작 이 흐름 속 요 소 를 합병 하 는 데 사용 합 니 다.min()
: 흐름 속 요소 의 최소 치 를 되 돌려 줍 니 다.max()
: 흐름 속 요소 의 최대 치 를 되 돌려 줍 니 다.sum()
: 흐름 속 요소 의 총 화 를 되 돌려 줍 니 다.count()
: 흐름 에 있 는 모든 요소 의 수량 을 되 돌려 줍 니 다.anyMatch(Predicate predicate)
: 흐름 에 최소한 하나의 요소 가 predicate 여과 조건 에 부합 되 는 지 판단 합 니 다.allMatch(Predicate predicate)
: 흐름 중의 모든 요소 가 predicate 여과 조건 에 부합 되 는 지 판단 합 니 다.noneMatch(Predicate predicate)
: 흐름 중의 모든 요소 가 predicate 여과 조건 에 부합 되 지 않 는 지 판단 합 니 다.findFirst()
: 흐름 의 첫 번 째 요 소 를 되 돌려 줍 니 다.findAny()
: 흐름 속 의 임의의 원 소 를 되 돌려 줍 니 다.Collection 의 stream () 방법
public class DemoApplication {
public static void main(String[] args) {
//
Collection collection = new HashSet();
//
collection.add("book_java ");
collection.add("book_c++ ");
collection.add("book_java ");
collection.add("book_ ");
collection.add("book01");
collection.add("book02");
collection.forEach(ele -> System.out.println(ele));
System.out.println("-------------------------------------");
System.out.println(" java :"
+ collection.stream().filter(ele -> ((String)ele).contains("java")).count());
System.out.println(" 7 :"
+ collection.stream().filter(ele -> ((String)ele).length() < 7).count());
System.out.println(" book_ :"
+ collection.stream().filter(ele -> ((String)ele).startsWith("book_")).count());
System.out.println("-------------------------------------");
// Collection stream() Stream;
// Stream mapToInt() Stream IntStream ;
// forEach() IntStream 。
Collection collectionLength = new ArrayList();
collection.stream().mapToInt(ele -> ((String)ele).length())
.forEach(ele -> ((ArrayList) collectionLength).add(ele));
// collectionLength.forEach(ele -> System.out.println(ele));
collectionLength.forEach(System.out::println);
}
}
실행 결과
book02
book01
book_java
book_java
book_
book_c++
-------------------------------------
java :2
7 :2
book_ :4
-------------------------------------
6
6
13
13
10
12
collection.stream().filter(Predicate super T> predicate).count()
이런 방식 으로 글 에서 앞에서 만 든 PredicateUtil 방법 을 바 꿀 수 있 습 니 다.stream()
방법 은 다음 과 같다. default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
filter()
방법 은 다음 과 같다. Stream<T> filter(Predicate<? super T> predicate);
* 8195: 8195: Stream 스 트림 인 터 페 이 스 를 직접 사용 하여 Collection 집합 요 소 를 처리 하 는 것 을 제외 하고 우 리 는 Collection 인터페이스
stream()
방법 으로 집합 에 대응 하 는 흐름 을 되 돌 릴 수 있다.절 차 는 다음 과 같다.stream()
방법 을 먼저 호출 하여 집합 을 Stream 으로 전환시킨다.mapToInt()
방법 으로 Stream 대상 의 IntStream 대상 을 얻 기;forEach()
방법 으로 IntStream 의 요 소 를 옮 겨 다 닙 니 다.참고서 '미 친 자바'
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 기초 - 빠 른 정렬 알고리즘 자바 구현R. Hoare 가 1962 년 에 제기 했다.2 알고리즘 사상.한 번 의 정렬 을 통 해 정렬 할 데 이 터 를 독립 된 두 부분 으로 나 누 었 습 니 다. 그 다음 에 이 방법 에 따라 이 두 부분의 데 이 터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.