Java8でよく使われる組み込み関数のまとめ(コード例)

不言
リリース: 2019-03-07 17:50:07
転載
4005 人が閲覧しました

この記事では、Java 8 でよく使われる組み込み関数の概要 (コード例) を紹介します。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。

#一般的に使用される関数インターフェイスは、後で簡単に参照できるように記録されています

#インターフェイス# # 戻り値の型#Description##述語#TT関数TR特定の種類の値を入力し、型変換などに使用される別の A 型値を出力します。サプライヤーNoneTNo入力、出力、特定の値の生成に使用される特定の値UnaryOperatorTTInput特定の型の値を取得し、同じ Type 値を出力します。これは、値に対する四則演算の実行など、値の同じ型の変換に使用されます。 BinaryOperator(T,T)T特定の型の 2 つの値を入力し、同じ型の値を出力します。2 つの値を結合する場合などに使用されます。Predicates は、1 つのパラメーターを含むブール インターフェイスです。これにはいくつかのデフォルト メソッドが含まれており、それらの組み合わせにより複雑なビジネス ロジック (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();
ログイン後にコピー
パラメータ
boolean 特定の値を入力し、特定の値を決定するために使用されるブール値を出力します Consumer
void 特定の値を入力しても出力はありません。特定の値を消費するために使用されます
Predicates
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
ログイン後にコピー
コンシューマ
コンシューマは、単一の入力パラメータを使用した操作の実行を表します。

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 の一般的なメソッド
Create Stream

既存のデータ構造を Stream に変換します

Stream<Integer> s = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> s = Arrays.stream(arr);
Stream<Integer> s = aList.stream();
ログイン後にコピー
    Through Stream 。 generate() メソッド:
  1. // 这种方法通常表示无限序列
    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 メソッド
  1. 操作オペレーションを各要素のストリームにマップするこれにより、あるストリームから別のストリームへの変換が完了します。
  2. map メソッドによって受け入れられるオブジェクトは Function インターフェイスであり、これは関数インターフェイスです。
<R> Stream<R> map(Function<? super T, ? extends R> mapper);


@FunctionalInterface
public interface Function<T, R> {
    // 将T转换为R
    R apply(T t);
}
ログイン後にコピー
Usage:
// 获取Stream里每个数的平方的集合
Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);
ns.map(n -> n * n).forEach(System.out::println);
ログイン後にコピー

flatMap

map メソッドは 1 対 1 のマッピングであり、入力データごとに 1 つの値のみが出力されます。

flatMap メソッドは 1 対多のマッピングです。各要素が Stream にマッピングされ、次にこの子 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 メソッドは、ストリーム内の要素をフィルタリングし、修飾された要素を含む新しいストリームを生成するために使用されます。

フィルター メソッドによって受け入れられるパラメーターは、Predicate インターフェイス オブジェクトです。このインターフェイスは関数インターフェイスです:

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


@FunctionInterface
public interface Predicate<T>   {
    // 判断元素是否符合条件
    boolean test(T t);
}
ログイン後にコピー
Use
// 获取当前Stream所有偶数的序列
Stream<Integer> ns = Stream.of(1, 2, 3, 4, 5);
ns.filter(n -> n % 2 == 0).forEach(System.out::println);
ログイン後にコピー

limit および Skip

limit to limit access 結果の数はデータベースの制限と同様です。スキップは、最初のいくつかの結果を除外するために使用されます。

sorted
sorted 関数は、Comparator 関数インターフェイスを実装するオブジェクトを渡す必要があります。このインターフェイスの抽象メソッド Compare は 2 つのパラメーターを受け取り、整数値を返します。その機能はソートです。 、その他 一般的な並べ替え方法は同じです。

distinct
distinct は、重複を排除するために使用されます。これは、データベースでの distinct の使用法と一致しています。

findFirst
findFirst メソッドは常に最初の要素を返します。要素がない場合は、空を返します。戻り値の型は Optional です。Swift に触れたことのある学生は、次のことを行う必要があります。これはオプションの型であることがわかります。最初の要素がある場合は、オプション型に格納されている値がそこにあります。最初の要素がない場合、型は空です。

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 を返すことができます。
これら 2 つのメソッドは終了操作であり、一度だけ呼び出すことができます。

allMatch、anyMatch、noneMatch

allMatch: ストリーム内のすべての要素が受信述語と一致し、true を返します

anyMatch: ストリーム内に 1 つの要素が存在する限り、受信述語と一致する場合、trueを返します
noneMatch: ストリーム内のどの要素も受信述語と一致せず、trueを返します

reduceメソッド

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート