Javaでのラムダ式のユースケーススキル


1. [関数型インターフェース]:インターフェースには、Runnable、Comparatorなどの抽象メソッドが1つだけあります。関数型インターフェースオブジェクトが必要な場合はいつでも、ラムダ式を使用できます。

2. [メソッドリファレンス]:ラムダ式のパラメーターをパラメーターとしてメソッドに渡します。実行効果は同じです。ラムダ式
はメソッドリファレンスを使用して表現できます。次の2つのメソッドは同等です。

  (x) -> System.out.println(x)
  System.out::println

 

  メソッドリファレンスには、主に3つの形式があります
    。1.Object:: instanceMethod
    2.Class :: staticMethod
    3.Class :: instanceMethod

  最初の2つのメソッドでは、対応するラムダ式パラメーターとメソッドパラメーターは同じです。次に例を示します。

  System.out::println
  (x) -> System.out.println(x)


  数学::捕虜 

  (x, y) -> Math.pow(x, y)


  3番目のメソッドでは、対応するラムダ式の本体で、最初のパラメーターがオブジェクトとして使用され、メソッドが呼び出され、他のパラメーターが呼び出されます

  String::compareToIgnoreCase
  (s1, s2) -> s1.compareToIgnoreCase(s2)


  コンストラクター参照は、特別なメソッドである点を除いて、メソッド参照に似ています:new。呼び出されるコンストラクターは、次のようなコンテキストによって異なります。

  List<String> labels = ...;
  Stream<Button> stream = labels.stream().map(Button::new);

  Button :: newは(x)-> Button(x)と同等であるため、呼び出されるコンストラクターは次のようになります。Button(x);
  単一のオブジェクトの作成に加えて、オブジェクトの配列を作成することもできます。次の2つのメソッドは次のとおりです。同等:

  int[]::new 
  (x) -> new int[x]

======マップ======

1.マップトラバーサル

itemsMap.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));


======リスト======

1.リストの並べ替え

  1)、昇順のリスト

    //原始版
    words.sort((Word first, Word second) -> first.getName().compareTo(second.getName()));
    //精简版
    Collections.sort(words, Comparator.comparing(Word::getName));
    //精简版,推荐使用这种
    words.sort(Comparator.comparing(Word::getName));
    //多重排序(连个都升序)
    words.sort(Comparator.comparing(Word::getName).thenComparingInt(Word::getCountry));
    //多重排序(第一个升,第二个降)
    words.sort(Comparator.comparing(Word::getName).reversed().thenComparingInt(Word::getCountry).reversed());


  2)、降順のリスト

words.sort(Comparator.comparing(Word::getName).reversed());

 

2.リストトラバーサル

words.forEach(System.out::println);

 

3.マップへのリスト(キー重複排除)

Map<String, Word> wordMapMap = wordList.stream().collect(Collectors.toMap(Word::getName, k -> k, (k1, k2) -> k1));


   マップへのリスト(キーを繰り返すことはできません)

Map<Integer,Word> userMap = wordList.stream().collect(Collectors.toMap(Word::getCountry, k -> k));

 

4.グループ

Map<String, List<Word>> groupMap = wordList.stream().collect(Collectors.groupingBy(Word::getName));


   複数のグループ化

Map<String, Map<Integer, List<Word>>> map2 = words.stream().collect(Collectors.groupingBy(Word::getName,Collectors.groupingBy(Word::getCountry)));

 

5.マッチフィルタリング

List<Word> filterList = wordList.stream().filter(v -> v.getName().equals("tiger")).collect(Collectors.toList());

 

wordList.stream().filter(v -> v.getName().contains("老")).forEach(System.out::println);

 

List<Word> filterList = wordList.stream().filter(v -> v.getCountry() > 2).collect(Collectors.toList());

 

             Predicate<Word> equals1 = v -> v.getCountry().equals(1);
             Predicate<Word> contains1 = v -> v.getName().contains("tiger");
             List<Word> filterList = wordList.stream().filter(contains1.and(equals1)).collect(Collectors.toList());

 

List<Double> filteredCost = cost.stream().filter(x -> x > 25.0).collect(Collectors.toList());

 

6、統計の合計を一覧表示します

int sum = wordList.stream().mapToInt(Word::getCountry).sum();

 

double sum = words.stream().mapToDouble(Word::getCountry).sum();

 

7.グループ統計

Map<String, Long> collectCnt = wordList.stream().collect(Collectors.groupingBy(Word::getName, Collectors.counting()));

 

8.グループ統計

Map<String, LongSummaryStatistics> map3 = words.stream().collect(Collectors.groupingBy(Word::getName,Collectors.summarizingLong(Word::getCountry)));

 

  複数のグループ化統計

Map<String, Map<Integer, LongSummaryStatistics>> map3 = words.stream().collect(Collectors.groupingBy(Word::getName,Collectors.groupingBy(Word::getCountry,Collectors.summarizingLong(Word::getCountry))));

 

9.重複排除(実際の状況に応じてWordのequalsとhashCodeを書き直します)

List<Word> list1= list.stream().distinct().collect(Collectors.toList());


    
10.データアセンブリ

String result = words.stream().map(Word::getName).collect(Collectors.joining("," , "[" , "]"));

 

12.オブジェクトコレクションから属性コレクションへ

List<String> result = words.stream().map(Word::getName).collect(Collectors.toList());

 

List<String> result = words.stream().map(y -> y.getName().concat(".jpg")).collect(Collectors.toList());


        
======配列======

1.配列の並べ替え
  1)、配列の昇順->元のバージョン

Arrays.sort(people, (first, second) -> Integer.compare(first.length(),  second.length()));


      配列の昇順-> Liteバージョン

Arrays.sort(people, Comparator.comparingInt(String::hashCode));


  2)、配列が降順

Arrays.sort(people, (second, first) -> Integer.compare(first.length(), second.length()));

 

2.配列は特定の要素の数をカウントします

long num = Arrays.stream(name).filter(x -> x.equals("tiger")).count();

 

3.配列は重複排除され、フィルタリングされ、コレクションに変換されます

List<String> filterList = Arrays.stream(name).filter(x -> !x.equals("赵强")).collect(Collectors.toList());

 

4.配列のフィルタリングと要素へのサフィックスの追加

List<String> filterList = Arrays.stream(name).filter(x -> !x.equals("tiger")).map(y -> y.concat(".jpg")).collect(Collectors.toList());

 

5.配列の統計的合計 

int num = Arrays.stream(arr).reduce(0, Integer::sum);

 

double sum =  Arrays.asList(10.0, 20.0, 30.0).stream().map(x -> x + x * 0.05).reduce(Double::sum).get();

 

double sum = Stream.of(10.0, 20.0, 30.0).map(x -> x + x * 0.05).reduce(Double::sum).get();

 

int sum = Stream.of(1, 2, 3, 4, 5).map(x -> x + x * 5).reduce(Integer::sum).get();

 

======合計======

  BinaryOperator<Integer> add = Integer::sum;
  Integer x = add.apply(20, 30);


======スレッド======

    private static void lambdaRunnable() {
        int age = 20;
        Runnable r2 = () -> {
            System.out.println(age);
            System.out.println("Hello world two!"+age);
        };
        r2.run();
    }

 

おすすめ

転載: blog.csdn.net/qq_36336332/article/details/106455729