gpt4 book ai didi

java - 处理 2 个 map 中的数据以创建第 3 个 map

转载 作者:行者123 更新时间:2023-11-30 07:18:17 25 4
gpt4 key购买 nike

Map<String, List<myStruct>> map1 = ...;  
Map<String, List<myStruct>> map2 = ...;

myStruct 有 2 个字段:时间戳和数字。

我需要使用在map1和map2中找到的键创建一个新的map3。对于每个键,每次 map1 和 map2 的时间戳匹配时,我都需要向 myStrcts 列表中添加一个新条目。该数量应等于map1 的数量除以map 2 的数量。

例如,如果它们每个都有 1 个条目:

Map<String, List<myStruct>> map1 = < "Cat" , < <1pm, 10> <2pm, 6>, <3pm, 8>>;  
Map<String, List<myStruct>> map2 = < "Cat" , < <1pm, 5> <2pm, 2>, <3pm, 1>>;

然后

Map<String, List<myStruct>> map3 = < "Cat" , < <1pm, 2> <2pm, 3>, <3pm, 8>>; 

因为下午 1 点:10/5 = 2,下午 2 点:6/2 = 3,下午 3 点:8/1 = 8。

我尝试过使用 lambda 函数,但我无法想出任何好的和高效的东西。

我现在正在做的是迭代map1中的每个条目,然后迭代myStructs的每个时间戳 - 将其与map2中的时间戳进行比较,如果时间戳相等,则将结果添加到map 3。我正在尝试找出一个更有效的解决方案。

最佳答案

您可以循环 map1 的条目然后对map的值进行流式划分。

检查下面的代码

短代码

tmp结果是 List<myStruct>

 tmp = e.getValue()
.stream()
.map(struct -> new myStruct(struct.time, map2.get(e.getKey())
.stream()
.filter(x -> x.time.equals(struct.time))
.mapToInt(x -> struct.number / x.number)
.findFirst().getAsInt()))
.collect(Collectors.toList());

长代码

public static void main(String[] args) {
Map<String, List<myStruct>> map1 = new HashMap<>();
Map<String, List<myStruct>> map2 = new HashMap<>();

myStruct one = new myStruct("1pm", 10);
myStruct two = new myStruct("1pm", 5);
myStruct thr = new myStruct("2pm", 6);
myStruct fou = new myStruct("2pm", 2);
myStruct fiv = new myStruct("3pm", 8);
myStruct six = new myStruct("3pm", 1);

map1.put("Cat", Arrays.asList(one, thr, fiv));
map2.put("Cat", Arrays.asList(two, fou, six));

Map<String, List<myStruct>> map3 = new HashMap<>(map1);

List<myStruct> tmp;

for (Map.Entry<String, List<myStruct>> e : map1.entrySet()) {
tmp = e.getValue()
.stream()
.map(struct -> new myStruct(struct.time, map2.get(e.getKey())
.stream()
.filter(x -> x.time.equals(struct.time))
.mapToInt(x -> struct.number / x.number)
.findFirst().getAsInt()))
.collect(Collectors.toList());

map3.put(e.getKey(), tmp);
}

System.out.println(map3); // {Cat=[<1pm, 2>, <2pm, 3>, <3pm, 8>]}
}

关于java - 处理 2 个 map 中的数据以创建第 3 个 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com