在 Java 中建立有序對映
對映是 Java 中儲存鍵值對的資料結構。對映是存在於 Collection
層次結構中的 interface
。這些鍵是唯一的,因此不允許重複鍵;但是,對映到鍵的變數可以有重複的值。HashMap
、LinkedHashMap
和 TreeMap
等類實現了 Map
介面。
使用 Java 中的 TreeMap
類對對映進行排序
下面,該程式演示了 Java 程式中的對映排序。
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
map.put("Third", 1);
map.put("First", 2);
map.put("Second", 3);
for (String key: map.keySet()) {
System.out.println(key + " ,ID = "+ map.get(key) );
}
}
}
TreeMap
類按升序對對映值進行排序。它還在內部實現了 SortedMap
介面,因此使用 new 關鍵字建立對映例項。
樹圖中的資料型別在例項化時指定。Map
鍵是 String
型別,它的值是 Integer
型別。
put
函式在樹圖中插入鍵值對。現在,定義了一個 for-each
迴圈來遍歷對映。在 Java 中,無法直接迭代對映。因此,對映的鍵最初被轉換為 Set
例項。
map.keySet
函式返回對映中存在的鍵的 Set
。此函式位於 TreeMap
類中,並返回當前鍵的有序檢視。get
函式獲取與鍵對應的值。
下面是按升序排列的輸出。
First ,ID = 2
Second ,ID = 3
Third ,ID = 1
使用 Java 8 函式建立對映排序
Java 8 提供對函數語言程式設計的支援,允許使用者在函式鏈上工作。
Streams
是 java.util
包中的一個介面,它可以輕鬆地在單個語句中處理順序操作。Streams
函式在發射器發射資料的管道中工作;它會根據使用者的需求進行過濾、處理、轉換等等。
package F09;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.util.AbstractMap.SimpleEntry;
public class MapOrdering {
public static void main(String[] args) {
Map<String, String> mapSortedByKey = Stream.of(
new SimpleEntry<>("key3", "value1"),
new SimpleEntry<>("key1", "value2"),
new SimpleEntry<>("key2", "value3"))
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
(oldVal, newValue) -> oldVal,
LinkedHashMap::new));
System.out.println();
System.out.print("Ordered List: ");
for (String s1 : mapSortedByKey.keySet()) {
System.out.print(" " + s1);
}
}
}
Stream
介面提供各種函式,並在不同的類中實現它以處理它們。在這裡,鍵值對流是使用 new SimpleEntry
類形成的。這些值被插入到 of
函式中以形成一個流。
在鏈系列中,sorted
函式被呼叫。該函式採用 Comparator
例項,根據定義的順序按順序排列鍵。函式 comparingByKey
返回按自然升序比較鍵的比較器。
sorted
函式最終返回按升序排列的值流。Stream
類的 collect
函式在新的 LinkedHashMap
例項中收集給定的對映值。該類保留所提供序列的插入順序。該函式將 Collector
例項作為引數。
第一個引數是建立新容器的供應商 toMap
函式。第二個引數是累積值的 BiConsumer
,最後一個引數是充當合併結果的組合器的 BiConsumer
。因此,LinkedHashMap::new
命令組合結果並返回形成的例項。
mapSortedByKey
例項現在包含使用上面的 for-each
迴圈迭代的順序對映元素。結果對映鍵列印在下面的標準輸出中。
Ordered List: key1 key2 key3
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn