【问题标题】:Sorting map<String,String> by date(value) using stream Java使用流 Java 按日期(值)对 map<String,String> 进行排序
【发布时间】:2020-05-21 19:48:03
【问题描述】:
我有 Map,缩写为键,时间(持续时间)为值
VBM=01:12.434
SVF=01:04.415
CSR=01:12.950
DRR=01:12.013
KMH=01:13.393
SPF=01:12.848
SVM=01:12.463
CLS=01:12.829
BHS=01:13.179
LHM=01:12.460
LSW=01:13.323
我需要将它从最短的持续时间到最长的排序。
我使用了 4 大方法来做到这一点,我想知道我是否可以通过流轻松做到这一点。
【问题讨论】:
标签:
java
sorting
date
time
java-stream
【解决方案1】:
要对地图进行排序,请尝试以下操作。一定要使用LinkedHashMap,否则它不会保持排序状态。您可以将Map.Entry.comparingByValue() 替换为您选择的Comparator。
map
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new
));
【解决方案2】:
Map<String, String> unSortedMap = new LinkedHashMap<>();
unSortedMap.put("VBM","01:12.434");
unSortedMap.put("SVF","01:04.415");
unSortedMap.put("CSR","01:12.950");
unSortedMap.put("DRR","01:12.013");
unSortedMap.put("KMH","01:13.393");
unSortedMap.put("SPF","01:12.848");
unSortedMap.put("SVM","01:12.463");
unSortedMap.put("CLS","01:12.829");
unSortedMap.put("BHS","01:13.179");
unSortedMap.put("LHM","01:12.460");
unSortedMap.put("LSW","01:13.323");
System.out.println("Unsorted Map : " + unSortedMap);
LinkedHashMap<String, String> sortedMap = new LinkedHashMap<>();
unSortedMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue());
.forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
System.out.println("\n\n\nSorted Map : " + unSortedMap);