java - LinkedHashMap 倒序到 LinkedHashMap 或 ArrayList
问题描述
我有一个LinkedHashMap<String,String>
看起来像这样的东西(真的不知道如何说明 HashMap):
{
"10/10/2010 10:10:10" => "SomeText1",
"10/10/2019 10:10:19" => "SomeText2",
"10/10/2020 10:10:20" => "SomeText3",
"10/10/2021 10:10:21" => "SomeText4"
}
我想这样说:
{
"10/10/2021 10:10:21" => "SomeText4",
"10/10/2020 10:10:20" => "SomeText3",
"10/10/2019 10:10:19" => "SomeText2",
"10/10/2010 10:10:10" => "SomeText1"
}
我已经编写了这个可行的解决方案,因为我想要的结果是一个 ArrayList,但我在想是否有一种更简单的方法来反转 LinkedHashMap,使用诸如排序之类的工具维护相同的类型。
private LinkedHashMap<String, String> map = new LinkedHashMap<>();
int sizeOfHashMap = map.size();
ArrayList reversedHashToArrayList = new ArrayList(map.size());
for (Map.Entry<String,String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
reversedHashToArrayList.add(0,entry);
}
解决方案
LinkedHashMap 按插入排序;按关联的日期时间排序会更合乎逻辑:
private SortedMap<LocalDateTime, String> map = new TreeMap<>(Comparator.naturalOrder()
.reversed());
LocalDateTimeFormatter formatter = LocalDateTimeFormatter.ofPattern("MM/dd/uuuu HH:mm:ss");
map.put(LocalDateTime.parse("10/10/2010 10:10:10", formatter), "...");
要指定对地图进行排序,有接口 SortedMap。更好地使用更通用的界面。排序地图的实现类是 TreeMap。但是,您想要一个反向比较。
您可以使用本地特定模式。请注意,上面我选择了月/日,而不是英国日/月。
推荐阅读
- reactjs - 在本机反应中嵌套导航器
- css - 带有背景图像的 Vue3 样式指令产生 404 错误
- javascript - Twitter 社交登录页面或从 Postman 获取令牌
- html - 仅使用 CSS 重新排列表格中的元素
- ssl - MITM 代理忽略 Android 应用程序的 SSL 证书验证
- reactjs - 复选框选中/取消选中在复选框树库中不起作用
- .net-core - 使用 .NET Core Identity 通过外部身份验证绕过登录
- c# - Xamarin 如何将类属性(来自另一个项目)绑定到 Picker.ItemDisplayBinding 属性
- javascript - 点击 b 按钮后触发 b-form-file
- r - 如何过滤具有多对列值的R数据框中的行