まず、Javaの8ストリームは何ですか
、Javaの8つのストリームを使用するボタンや、私たちは、マップの値で並べ替えることができます。しくみはこうです:
- オブジェクトクラスStreamオブジェクトのコレクションを変換するなどの一覧地図や
- 使用してのストリーム
sorted()
ソートする方法を - 最終的に戻ります
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()
戻りますHashMap
。HashMap
私たちは、要素の順序を保証することはできません。
キーに従って逆の順序で、所望であれば、赤色領域のコード下で加えました。
第四に、値マップのソート
もちろん、あなたはまた、それらの値に従ってソートマップへのストリーム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
上記に示したように、キー(国/地域名)がアルファベット順にソートされた自然。
あなたの注意を楽しみにして
- ブロガーは最近、本を書いた:「手のタッチ手をSpringBootシリーズ章97節を学ぶためにあなたを教えるために-16」
- :この記事は、ソース(エンはテキストのみをオンにしてはいけません)を示して再現された文字ジボオフ。