在 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 static java.util.AbstractMap.SimpleEntry;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
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