> Java > java지도 시간 > Java8에서 일반적으로 사용되는 내장 함수 요약(코드 예제)

Java8에서 일반적으로 사용되는 내장 함수 요약(코드 예제)

不言
풀어 주다: 2019-03-07 17:50:07
앞으로
4033명이 탐색했습니다.

이 글은 Java 8에서 일반적으로 사용되는 내장 함수에 대한 요약(코드 예제)을 제공합니다. 특정 참고 가치가 있으므로 도움이 필요한 친구가 참고할 수 있기를 바랍니다.

나중에 쉽게 참조할 수 있도록 자주 사용되는 함수 인터페이스를 기록해 두었습니다.

Interface Parameters Return type Description
Predicate T boolean 을 입력하세요 특정 값, 특정 값을 결정하는 데 사용되는 부울 값 출력
Consumer T void 특정 값을 입력하면 출력되지 않습니다. 특정 값을 소비하는 데 사용됩니다
Function T R 특정 유형의 값을 입력하고, 다른 유형의 값을 출력하고, 유형 변환 등에 사용됩니다.
Supplier< T> None T 입력 없음, 특정 값 출력, 특정 값을 생성하는 데 사용
UnaryOperator T T 특정 유형의 값을 입력하면 동일하게 출력 값에 대해 4개의 산술 연산을 수행하는 등 동일한 유형의 값 변환에 사용되는 값 유형입니다.
BinaryOperator (T,T) T 두 개의 값을 입력하세요. 특정 유형을 지정하고 두 값을 병합하기 위해 동일한 유형의 값을 출력합니다.
Predicates

Predicates는 하나의 매개변수를 포함하는 부울 인터페이스입니다. 여기에는 몇 가지 기본 메서드가 포함되어 있으며 이들의 조합으로 복잡한 비즈니스 논리(예: and, or, negate)를 구현할 수 있습니다. 샘플 코드는 다음과 같습니다.

Predicate<String> predicate = (s) -> s.length() > 0;
 
predicate.test("foo");              // true
predicate.negate().test("foo");     // false
 
Predicate<Boolean> nonNull = Objects::nonNull;
Predicate<Boolean> isNull = Objects::isNull;
 
Predicate<String> isEmpty = String::isEmpty;
Predicate<String> isNotEmpty = isEmpty.negate();
로그인 후 복사
Functions

Functions 인터페이스는 매개변수를 수신하고 결과를 생성합니다. 기본 메소드는 일반적으로 여러 기능을 함께 연결하는 데 사용됩니다(compose, andThen).

Function<String, Integer> toInteger = Integer::valueOf;
Function<String, String> backToString = toInteger.andThen(String::valueOf);
 
backToString.apply("123");     // "123"
로그인 후 복사
Suppliers

Suppliers 인터페이스는 특정 유형의 결과를 생성합니다. 함수와 달리 매개변수를 받지 않습니다.

Supplier<Person> personSupplier = Person::new;
personSupplier.get();   // new Person
로그인 후 복사
Consumers

소비자는 단일 입력 매개변수를 사용하는 작업을 나타냅니다.

Consumer<Person> greeter = (p) -> System.out.println("Hello, " + p.firstName);
greeter.accept(new Person("Luke", "Skywalker"));
로그인 후 복사
Comparators

비교기는 이전 버전의 Java에서 업그레이드되었으며 일부 기본 메소드가 추가되었습니다.

Comparator<Person> comparator = (p1, p2) -> p1.firstName.compareTo(p2.firstName);
 
Person p1 = new Person("John", "Doe");
Person p2 = new Person("Alice", "Wonderland");
 
comparator.compare(p1, p2);             // > 0
comparator.reversed().compare(p1, p2);  // < 0
로그인 후 복사

Stream 일반 메서드

Create Stream
  1. 기존 데이터 구조를 Stream
Stream<Integer> s = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> s = Arrays.stream(arr);
Stream<Integer> s = aList.stream();
로그인 후 복사
  1. 으로 변환 Stream.generate() 메서드를 통해:
// 这种方法通常表示无限序列
Stream<T> s = Stream.generate(SuppLier<T> s);
// 创建全体自然数的Stream
class NatualSupplier implements Supplier<BigInteger> {
    BigInteger next = BigInteger.ZERO;
    @Override
    public BigInteger get() {
        next = next.add(BigInteger.ONE);
        return next;
    }
}
로그인 후 복사
  1. 다른 메서드를 통해 반환
Stream<String> lines = Files.lines(Path.get(filename))
...
로그인 후 복사
map 메서드

Stream의 각 요소에 작업 작업을 매핑하여 한 Stream에서 다른 Stream으로의 변환을 완료합니다.
map 메서드에서 허용하는 개체는 기능적 인터페이스인 Function 인터페이스입니다.

<R> Stream<R> map(Function<? super T, ? extends R> mapper);


@FunctionalInterface
public interface Function<T, R> {
    // 将T转换为R
    R apply(T t);
}
로그인 후 복사

사용 방법:

// 获取Stream里每个数的平方的集合
Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);
ns.map(n -> n * n).forEach(System.out::println);
로그인 후 복사
FlatMap

map 메서드는 일대일 매핑이며 각 입력 데이터에 대해 하나의 값만 출력됩니다.

FlatMap 메소드는 일대다 매핑입니다. 각 요소는 Stream에 매핑되고, 이 하위 스트림의 요소는 상위 컬렉션에 매핑됩니다.

Stream<List<Integer>> inputStream = Stream.of(Arrays.asList(1), Arrays.asList(2, 3), Arrays.asList(4, 5, 6));
List<Integer> integerList = inputStream.flatMap((childList) -> childList.stream()).collect(Collectors.toList());
//将一个“二维数组”flat为“一维数组”
integerList.forEach(System.out::println);
로그인 후 복사
filter 메소드

filter 메소드는 필터링에 사용됩니다. Stream 요소를 처리하고 조건을 충족하는 요소로 새 Stream을 생성합니다.
filter 메소드에서 허용하는 매개변수는 Predicate 인터페이스 개체입니다. 이 인터페이스는 기능적 인터페이스입니다.

Stream<T> filter(Predicate<? super T>) predicate;


@FunctionInterface
public interface Predicate<T>   {
    // 判断元素是否符合条件
    boolean test(T t);
}
로그인 후 복사

얻을 수 있는 결과 수를 제한하려면

// 获取当前Stream所有偶数的序列
Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);
ns.filter(n -> n % 2 == 0).forEach(System.out::println);
로그인 후 복사
limit 및 Skip

limit를 사용하세요. 데이터베이스 건너뛰기가 사용됩니다. 제외되기 전의 결과 수입니다.

sorted

정렬 함수는 Comparator 기능 인터페이스를 구현하는 객체를 전달해야 합니다. 이 인터페이스의 추상 메서드 비교는 두 개의 매개변수를 받고 정수 값을 반환하며 이는 다른 일반적인 정렬과 일치합니다. 행동 양식.

distinct

distinct는 중복을 제거하는 데 사용되며, 이는 데이터베이스의 구별 사용과 일치합니다.

findFirst

findFirst 메소드는 항상 첫 번째 요소를 반환하며, 그렇지 않은 경우 반환 값 유형은 Optional 유형입니다. is 첫 번째 요소에는 Optional 유형에 저장된 값이 있습니다. 첫 번째 요소가 없으면 유형은 비어 있습니다.

Stream<User> stream = users.stream();
Optional<String> userID = stream.filter(User::isVip).sorted((t1, t2) -> t2.getBalance() - t1.getBalance()).limit(3).map(User::getUserID).findFirst();
userID.ifPresent(uid -> System.out.println("Exists"));
로그인 후 복사
min, max

min은 정수 스트림의 최소값을 찾아 OptionalInt를 반환할 수 있습니다.

max는 정수 스트림의 최대값을 찾아 OptionalInt를 반환할 수 있습니다.

이 두 메서드는 종료 작업이며 한 번만 호출할 수 있습니다.

allMatch, anyMatch, noneMatch

allMatch: Stream의 모든 요소가 들어오는 조건자와 일치하고 true를 반환합니다.

anyMatch: Stream의 한 요소가 들어오는 조건자와 일치하는 한 true를 반환합니다

noneMatch: None of the Stream의 요소는 들어오는 조건자와 일치합니다. 입력된 조건자는 true를 반환합니다

reduce method

reduce 메서드는 Stream의 각 요소를 BiFunction에 한 번에 적용하고 결과를 병합합니다.
reduce 메소드가 허용하는 메소드는 BinaryOperator 인터페이스 객체입니다.

Optional<T> reduce(BinaryOperator<T> accumulator);


@FuncationalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
    // Bi操作,两个输入,一个输出
    T apply(T t, T u);
}
로그인 후 복사

사용법:

// 求当前Stream累乘的结果
Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);
int r = ns.reduce( (x, y) -> x * y ).get();
System.out.println(r);
로그인 후 복사


위 내용은 Java8에서 일반적으로 사용되는 내장 함수 요약(코드 예제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿