Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java stream api根据对象内部存储的信息将对象列表转换为嵌套映射?_Java_Date_Java Stream - Fatal编程技术网

如何使用java stream api根据对象内部存储的信息将对象列表转换为嵌套映射?

如何使用java stream api根据对象内部存储的信息将对象列表转换为嵌套映射?,java,date,java-stream,Java,Date,Java Stream,我有一个对象列表list,其中SingleDay是 class SingleDay{ private Date date; private String County; // otherstuff } 我想把这个列表转换成地图。也就是说,我想要一张从日期到县的地图,回到原始对象 例如: 2020年12月2日:{“Rockbridge”:{SingleDayObject} 如果从一个对象列表到一个地图,而不是一个对象列表到一个嵌套的地图,我无法得到任何工作和我在

我有一个对象列表
list
,其中
SingleDay

class SingleDay{ 
      private Date date;
      private String County;

   // otherstuff
}
我想把这个列表转换成
地图
。也就是说,我想要一张从日期到县的地图,回到原始对象

例如:
2020年12月2日:{“Rockbridge”:{SingleDayObject}

如果从一个对象列表到一个地图,而不是一个对象列表到一个嵌套的地图,我无法得到任何工作和我在网上找到的所有东西

基本上,我希望能够快速查询与日期和县相对应的对象

谢谢

按以下步骤操作:

Map<LocalDate, Map<String, SingleDay>> result = list.stream()
                .collect(Collectors.toMap(SingleDay::getDate, v -> Map.of(v.getCounty(), v)));

注意:我使用了
LocalDate
而不是过时的
java.util.Date
。我强烈建议您使用API,而不是java.util.Date。查看以了解更多信息。

一个可读性稍高的数据结构是制作
地图。可能看起来是多余的,但这将允许您轻松找到您的对象

Map<SingleDay, SingleDay> myMap = new HashMap();
list.forEach(day -> myMap.put(day, day));

非常重要的一点是,不要忘记覆盖
SingleDay
equals()
方法,基于你认为是相等的。

你可以认为你把数据存储在地图中,其中字符串可以是“日期:国家”,而值是单日物件,有可能有“代码>单日< /代码>对象,有重复的<代码>日期<代码>和<代码>国家< /代码>?但我想知道,如果这是意外发生,该如何处理。我是从csv上读的,所以我认为这是可能的,但是如果给定一个日期,我将无法找到相应的单身日。我已经需要它了,对吗?很好的答案+1。我确实收到了以下警告
类型不匹配:无法从映射转换到映射
关于使用
LocalDate
而不是
Date
的好建议,尽管我不太确定您的解决方案的总体情况。预期的结果不应该是类似于
list.stream().collect(Collectors.toMap(SingleDay::getDate,v->Map.of(v.getcountry(),v)))的东西吗?或者我从行动标准中漏掉了什么?使用您当前的方法,每个外部地图映射将与内部地图具有相同的值。谢谢,@OusmaneD。为了得到反馈。当我写解决方案时,我不确定这一点,但在看了你的评论之后,我认为这是有意义的。我已采纳了你的建议。如果OP希望得到这个或原始解决方案,我将等待他的评论。@Code_模式实际上这个问题最初并没有用java-8标记。因此我建议
Map.of
。最初的答案是根据
date
键将整个列表收集到
Map
,更新后的答案(感谢@OusmaneD.及时的建议)是将条目的值与键相对应。
Key: 2020-05-27, Value: {Z=SingleDay [date=2020-05-27, County=Z]}
Key: 2020-05-26, Value: {Y=SingleDay [date=2020-05-26, County=Y]}
Key: 2020-05-25, Value: {X=SingleDay [date=2020-05-25, County=X]}
Map<SingleDay, SingleDay> myMap = new HashMap();
list.forEach(day -> myMap.put(day, day));
SingleDay day = mMap.get(myDay);