이 글은 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는 하나의 매개변수를 포함하는 부울 인터페이스입니다. 여기에는 몇 가지 기본 메서드가 포함되어 있으며 이들의 조합으로 복잡한 비즈니스 논리(예: 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 인터페이스는 매개변수를 수신하고 결과를 생성합니다. 기본 메소드는 일반적으로 여러 기능을 함께 연결하는 데 사용됩니다(compose, andThen).
Function<String, Integer> toInteger = Integer::valueOf; Function<String, String> backToString = toInteger.andThen(String::valueOf); backToString.apply("123"); // "123"
Suppliers 인터페이스는 특정 유형의 결과를 생성합니다. 함수와 달리 매개변수를 받지 않습니다.
Supplier<Person> personSupplier = Person::new; personSupplier.get(); // new Person
소비자는 단일 입력 매개변수를 사용하는 작업을 나타냅니다.
Consumer<Person> greeter = (p) -> System.out.println("Hello, " + p.firstName); greeter.accept(new Person("Luke", "Skywalker"));
비교기는 이전 버전의 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<Integer> s = Stream.of(1, 2, 3, 4, 5); Stream<Integer> s = Arrays.stream(arr); Stream<Integer> s = aList.stream();
// 这种方法通常表示无限序列 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; } }
Stream<String> lines = Files.lines(Path.get(filename)) ...
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);
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 메소드는 필터링에 사용됩니다. 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를 사용하세요. 데이터베이스 건너뛰기가 사용됩니다. 제외되기 전의 결과 수입니다.
정렬 함수는 Comparator 기능 인터페이스를 구현하는 객체를 전달해야 합니다. 이 인터페이스의 추상 메서드 비교는 두 개의 매개변수를 받고 정수 값을 반환하며 이는 다른 일반적인 정렬과 일치합니다. 행동 양식.
distinct는 중복을 제거하는 데 사용되며, 이는 데이터베이스의 구별 사용과 일치합니다.
findFirst 메소드는 항상 첫 번째 요소를 반환하며, 그렇지 않은 경우 반환 값 유형은 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은 정수 스트림의 최소값을 찾아 OptionalInt를 반환할 수 있습니다.
max는 정수 스트림의 최대값을 찾아 OptionalInt를 반환할 수 있습니다.
이 두 메서드는 종료 작업이며 한 번만 호출할 수 있습니다.
allMatch: Stream의 모든 요소가 들어오는 조건자와 일치하고 true를 반환합니다.
anyMatch: Stream의 한 요소가 들어오는 조건자와 일치하는 한 true를 반환합니다
noneMatch: None of the Stream의 요소는 들어오는 조건자와 일치합니다. 입력된 조건자는 true를 반환합니다
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!