Java8ストリームAPIまたはキー値がソートされている地図を使用します

まず、Javaの8ストリームは何ですか

、Javaの8つのストリームを使用するボタンや、私たちは、マップの値で並べ替えることができます。しくみはこうです:

Javaのストリーム関数型プログラミング? 私はあなたを与えることをいい、ケースの詳細なグラフィックスを言う使用しました

  1. オブジェクトクラスStreamオブジェクトのコレクションを変換するなどの一覧地図や
  2. 使用してのストリームsorted()ソートする方法を
  3. 最終的に戻りますLinkedHashMap(ソート順序を保持することができます)

sorted()方法Comparatorマップ値型のいずれかでソートすることができるパラメータ、など。あなたはなじみのないコンパレータである場合は、この番号で記事の数日前を見ることができ、リストをソートするコンパレータを使用することに専念記事があります。

第二に、HashMapのマージ()関数について学びます

ソート地図を学習する前に、キーリピート時間シナリオは値マップの要素をどのように扱うか、であるHashMapのマージ()関数、について話すことが必要です。この関数は、3つのパラメータを取ります。

  • パラメータ:マップキーの内部を置くために
  • 二つのパラメータ:マップ内のプットの価値
  • 三つのパラメータ:重複キーが発生した場合、どのように対処します。関数とすることができる、それはまた、ラムダ式のように記述することができます。
        String k = "key";
        HashMap<String, Integer> map = new HashMap<String, Integer>() {{
            put(k, 1);
        }};
        map.merge(k, 2, (oldVal, newVal) -> oldVal + newVal);

我々は最初のHashMapを作成し、コードのセクション上記参照、およびKのキー値に入力:エレメント1。私たちは、マージ機能を呼び出すと、そのk個にマップするには:キーと値のペア2、バックラムダ式の実装に、キーの重複をkのとき。式の意味:新しい値newValに(1 + 2)を加算OLDVAL古い値を返し、今kは1つのマップのみの要素があります:3。

実際には、ラムダ式は非常に単純です:匿名関数は、パラメータが左矢印、右矢印は、本体の関数であること。パラメータおよび関数型の戻り値は、コードは、コンテキストによって決定されます。

第三に、地図のキー順序に従って

次の例では、ソートするためにJava 8ストリームマップのキーを使用しています。

// 创建一个Map,并填入数据
Map<String, Integer> codes = new HashMap<>();
codes.put("United States", 1);
codes.put("Germany", 49);
codes.put("France", 33);
codes.put("China", 86);
codes.put("Pakistan", 92);

// 按照Map的键进行排序
Map<String, Integer> sortedMap = codes.entrySet().stream()    
        .sorted(Map.Entry.comparingByKey())
        .collect(
                Collectors.toMap(
                    Map.Entry::getKey, 
                    Map.Entry::getValue,
                    (oldVal, newVal) -> oldVal,
                    LinkedHashMap::new
                )
        );

// 将排序后的Map打印
sortedMap.entrySet().forEach(System.out::println);

コード内で、上記第2項を参照してください。

  • まず、タイプストリームマップストリーム型を変換するのentrySet()。ストリームを()を使用。
  • その後方法、ソートに従ってマップキーの順序であることMap.Entry.comparingByKey()、に従ってソート
  • 最後に、のLinkedHashMapにメソッドストリームの流れを収集します。他のパラメータはラムダ式は、マージ処理の三番目のパラメータの使用方法と一致し、マージルールである、第三引数の焦点を見て、言うのは難しいです。新しい値が古い値に戻ることができないように、本実施ので、重複するキーはありません。

上記のプログラムは、コンソールキー(国/地域名)の自然アルファベット順で次のように出力されます:

China=86
France=33
Germany=49
Pakistan=92
United States=1

ことに注意してくださいの使用LinkedHashMap結果は秩序を維持するために命じストアに。デフォルトでは、Collectors.toMap()戻りますHashMapHashMap私たちは、要素の順序を保証することはできません。

キーに従って逆の順序で、所望であれば、赤色領域のコード下で加えました。

第四に、値マップのソート

もちろん、あなたはまた、それらの値に従ってソートマップへのストリームAPIを使用することができます。

Map<String, Integer> sortedMap2 = codes.entrySet().stream()
        .sorted(Map.Entry.comparingByValue())
        .collect(Collectors.toMap(
                Map.Entry::getKey,
                Map.Entry::getValue,
                (oldVal, newVal) -> oldVal,
                LinkedHashMap::new));

sortedMap2.entrySet().forEach(System.out::println);

これは、出力された値によってソートされた地図に示されています:

United States=1
France=33
Germany=49
China=86
Pakistan=92

第五に、ソートボタンのTreeMapを使用します

あなたが知っているかもしれませんがそこTreeMapの順序内の要素があり、そのメソッドのTreeMapの並べ替えを使用することが望ましいです。あなたは、作成された実行する必要があるTreeMapオブジェクトとデータHashMapに入れをTreeMap、それは非常に簡単です:

// 将 `HashMap` 转为 `TreeMap`
Map<String, Integer> sorted = new TreeMap<>(codes);

これが出力されます。

China=86
France=33
Germany=49
Pakistan=92
United States=1

上記に示したように、キー(国/地域名)がアルファベット順にソートされた自然。

あなたの注意を楽しみにして

おすすめ

転載: www.cnblogs.com/zimug/p/11781375.html