Java 8でキーと値でHashMapをソートする方法–完全なチュートリアル
公開: 2020-09-18
Java 8の場合–マップをソートする方法は?
Crunchifyでは、約400のJavaチュートリアルを作成しましたが、これはJava8カテゴリへの追加です。
私はJavaコレクションが大好きで、Map and List、LinkedList、JSONArrayなどを反復処理する方法に関する複数のチュートリアルがあります。
このチュートリアルでは、Java8でHashMapをキーと値で並べ替える最良の方法について説明します。
始めましょう:
- クラスCrunchifySortMapByKeyValueJava8.javaを作成します
- HashMap <String、Integer> crunchifyMapを作成します。これを使用して、キーと値で並べ替えます。
-
For KEY
:リストからランダムな会社を追加します- パターン:リストから1から10 +(-)+ 1社までの乱数
- 会社リスト:crunchify.com、google.com、twitter.com
-
For VALUE
:1から50までの1つの乱数を追加します - 元のマップを印刷し、キーマップで並べ替え、値マップで並べ替えます
Map.Entry。
comparingByKey()
は、キーの自然な順序でMap.Entryを比較するコンパレータを返します。Map.Entry。
comparingByValue()
は、Map.Entryを値に対して自然な順序で比較するコンパレータを返します。
完全なJavaコードは次のとおりです。
以下のコードに記載されている2つの質問を注意深く見てください。これらは、プロジェクトで使用する場合に備えて、単純なユーティリティです。
- ArrayListからランダムな値を取得するにはどうすればよいですか?
- Java 8でHashMapを反復処理する方法は?
CrunchifySortMapByKeyValueJava8.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
package crunchify . com . tutorial ; import java . util . ArrayList ; import java . util . HashMap ; import java . util . LinkedHashMap ; import java . util . Map ; import java . util . Random ; import java . util . stream . Stream ; /** * @author Crunchify.com * * Best way to sort HashMap by Key and Value in Java8 - Tutorial by App Shah * */ public class CrunchifySortMapByKeyValueJava8 { private static final Random crunchifyRandom = new Random ( ) ; public static void main ( String [ ] argv ) { Map < String , Integer > crunchifyMap = new HashMap < > ( ) ; // Let's first create companies ArrayList ArrayList <String> companies = new ArrayList < > ( ) ; companies . add ( "Crunchify.com" ) ; companies . add ( "Google.com" ) ; companies . add ( "Twitter.com" ) ; // Let's add 10 entries to HashMap crunchifyMap for ( int i = 1 ; i < = 10 ; ++ i ) { // How to get Random value from ArrayList? String company = companies . get ( crunchifyRandom . nextInt ( companies . size ( ) ) ) ; // Basically we are creating // Key with pattern: 1-Crunchify, 5-Google, and so on... // Random Value: Number between 1 to 50 crunchifyMap . put ( crunchifyRandom . nextInt ( 10 ) + "-" + company , crunchifyRandom . nextInt ( 50 ) ) ; } crunchifyLog ( "~~~~~~~~~~~~~~Original HashMap (crunchifyMap value)~~~~~~~~~~~~~~" ) ; crunchifyLog ( crunchifyMap ) ; crunchifyLog ( "\n~~~~~~~~~~~~~~Updated HashMap after Sorting by Key~~~~~~~~~~~~~~" ) ; // Map: An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. Map < String , Integer > key = crunchifySortByKey ( crunchifyMap ) ; iterateThroughHashMapJava8 ( key ) ; crunchifyLog ( "\n~~~~~~~~~~~~~~Updated HashMap after Sorting by Value~~~~~~~~~~~~~~" ) ; Map < String , Integer > value = crunchifySortByValue ( crunchifyMap ) ; iterateThroughHashMapJava8 ( value ) ; } // Simple Log Statement private static void crunchifyLog ( Object string ) { System . out . println ( string ) ; } // How to Iterate through HashMap in Java 8? private static void iterateThroughHashMapJava8 ( Map < String , Integer > crunchifyMap ) { crunchifyMap . forEach ( ( k , v ) - > { System . out . println ( "Key: " + k + "\t\t\t Value: " + v ) ; } ) ; } // Let's sort HashMap by Key // Comparable: This interface imposes a total ordering on the objects of each class that implements it. // This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method. public static < K extends Comparable < ? super K > , V > Map < K , V > crunchifySortByKey ( Map < K , V > crunchifyMap ) { Map < K , V > crunchifyResult = new LinkedHashMap < > ( ) ; Stream < Map . Entry < K , V > > sequentialStream = crunchifyMap . entrySet ( ) . stream ( ) ; // comparingByKey() returns a comparator that compares Map.Entry in natural order on key. sequentialStream . sorted ( Map . Entry . comparingByKey ( ) ) . forEachOrdered ( c - > crunchifyResult . put ( c . getKey ( ) , c . getValue ( ) ) ) ; return crunchifyResult ; } // Let's sort HashMap by Value public static < K , V extends Comparable < ? super V > > Map < K , V > crunchifySortByValue ( Map < K , V > crunchifyMap ) { Map < K , V > crunchifyResult = new LinkedHashMap < > ( ) ; // Stream: A sequence of elements supporting sequential and parallel aggregate operations. // The following example illustrates an aggregate operation using Stream and IntStream. Stream < Map . Entry < K , V > > sequentialStream = crunchifyMap . entrySet ( ) . stream ( ) ; // comparingByValue() returns a comparator that compares Map.Entry in natural order on value. // sorted(): Returns a stream consisting of the elements of this stream, sorted according to the provided Comparator. sequentialStream . sorted ( Map . Entry . comparingByValue ( ) ) . forEachOrdered ( c - > crunchifyResult . put ( c . getKey ( ) , c . getValue ( ) ) ) ; // getValue(): Returns the value corresponding to this entry. If the mapping has been removed from the backing map (by the iterator's remove operation), the results of this call are undefined. // getKey(): Returns the key corresponding to this entry. return crunchifyResult ; } } |
Eclipseコンソールの出力:
上記のプログラムをJavaアプリケーションとして実行するだけで、次のような結果が表示されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Original HashMap ( crunchifyMap value ) ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ { 9 - Google . com = 36 , 6 - Twitter . com = 17 , 3 - Google . com = 39 , 2 - Twitter . com = 43 , 5 - Crunchify . com = 2 , 8 - Google . com = 5 , 8 - Crunchify . com = 47 , 5 - Google . com = 10 , 7 - Google . com = 3 } ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Updated HashMap after Sorting by Key ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Key : 2 - Twitter . com Value : 43 Key : 3 - Google . com Value : 39 Key : 5 - Crunchify . com Value : 2 Key : 5 - Google . com Value : 10 Key : 6 - Twitter . com Value : 17 Key : 7 - Google . com Value : 3 Key : 8 - Crunchify . com Value : 47 Key : 8 - Google . com Value : 5 Key : 9 - Google . com Value : 36 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Updated HashMap after Sorting by Value ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Key : 5 - Crunchify . com Value : 2 Key : 7 - Google . com Value : 3 Key : 8 - Google . com Value : 5 Key : 5 - Google . com Value : 10 Key : 6 - Twitter . com Value : 17 Key : 9 - Google . com Value : 36 Key : 3 - Google . com Value : 39 Key : 2 - Twitter . com Value : 43 Key : 8 - Crunchify . com Value : 47 |
上記のプログラムの実行中に問題が発生した場合はお知らせください。