java - 如何根据映射中相似的键值前缀构建对象

标签 java list properties split maps

首先我使用Java来编写这个。 所以我有一个带有这样的键和值的 Map。

 Key  = Value
"a.1" = "a1"
"a.2" = "a2"
"a.3" = "a3"
"b.1" = "b1"
"b.2" = "b2"
"b.3" = "b3"
"c.1" = "c1"
"c.2" = "c2"
"c.3" = "c3"

我需要做的是将其全部拆分并制作,以便最终我可以循环并使用

创建新对象
someloop{
    new someObject(a1,b1,c1); // new someObject(a2,b2,c2);  // new someObject(a3,b3,c3);
}

我需要能够使其动态化,以便我可以添加另一个前缀 (d,e) 并检查数字是否丢失或被跳过。

最佳答案

如果您更改 SomeObject 的构造函数以接受字符串列表,这可能会起作用:

 Map<String, String> map = new HashMap<>();
    map.put("a.1", "a1");
    map.put("a.2", "a2");
    map.put("a.3", "a3");
    map.put("b.1", "b1");
    map.put("b.2", "b2");
    map.put("b.3", "b3");
    map.put("c.1", "c1");
    map.put("c.2", "c2");
    map.put("c.3", "c3");

    Map<String, List<String>> grouped = map.entrySet().stream()
            .sorted(Comparator.comparing(Map.Entry::getKey))
            .collect(Collectors.groupingBy(
                    entry -> entry.getKey().split("\\.")[0],
                    HashMap::new,
                    Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

    List<SomeObject> objects = grouped.values().stream().map(SomeObject::new).collect(Collectors.toList());

    System.out.println(objects);

关于java - 如何根据映射中相似的键值前缀构建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40018556/

相关文章:

java - 创建以下 for 循环是否不利于垃圾收集?

version - Java 版本的差异

java - 什么是动态照明的有效实现?

c++ - wxWidgets,wxListCtrl : How to prevent auto size of column when db-click on divider

python - 如何提取、访问和使用所选子列表索引处列表的所有值?

c# - 是否可以在运行时设置 C# init-only 属性?

Java:修改 Java 应用程序的系统属性

java - 服务响应慢: Java SecureRandom &/dev/random次

python - 从列表中随机选择子例程

java - Mule - 测试具有以 Mule 属性作为文件路径的入站/出站端点的流