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

标签 java date java-stream

我有一个对象列表 List<SingleDay>其中 SingleDay

class SingleDay{ 
      private Date date;
      private String County;

   // otherstuff
}

我希望将此列表转换为 Map<Date, Map<String, SingleDay>> .也就是说,我想要一张从 Date 到 Counties 的 map 回到原始对象的 map 。

例如:
02/12/2020 : { "Rockbridge": {SingleDayObject}}

如果从对象列表到 map ,而不是从对象列表到嵌套 map ,我无法获得任何工作以及我在网上找到的所有内容。

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

谢谢!

最佳答案

按如下方式进行:

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

演示:

import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

class SingleDay {
    private LocalDate date;
    private String County;

    public SingleDay(LocalDate date, String county) {
        this.date = date;
        County = county;
    }

    public LocalDate getDate() {
        return date;
    }

    public String getCounty() {
        return County;
    }

    @Override
    public String toString() {
        return "SingleDay [date=" + date + ", County=" + County + "]";
    }
    // otherstuff
}

public class Main {
    public static void main(String[] args) {
        List<SingleDay> list = List.of(new SingleDay(LocalDate.now(), "X"),
                new SingleDay(LocalDate.now().plusDays(1), "Y"), new SingleDay(LocalDate.now().plusDays(2), "Z"));

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

        // Display
        result.forEach((k, v) -> System.out.println("Key: " + k + ", Value: " + v));
    }
}

输出:

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]}

注意:我使用的是 LocalDate 而不是过时的 java.util.Date。我强烈建议您使用 java.time API 而不是损坏的 java.util.Date。检查this了解更多信息。

关于java - 您如何使用 java stream api 根据存储在对象内部的信息将对象列表转换为嵌套映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005476/

相关文章:

R 计算日期范围之间每月发生的频率

java - 如何对属于两个或多个组的列表中的对象进行分组?

java - 如何从对象中包含的对象列表中每个元素的字段中检索字符串集?

java - 为什么 Avalon-Framework 被关闭了?

java - 将 jsp 文件合并/叠加到特定位置

java - 使用法式java格式化时间

Java 8 Streams - 分层排序嵌套列表

java - SmartClient 项目的 Maven 用法

java - JAVA中如何捕捉系统调用?

ios - swift :围绕给定数字创建范围