gpt4 book ai didi

Java 8 lambda 添加到 Hashmap 中的列表,在 Hashmap 中

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:59 25 4
gpt4 key购买 nike

我有一个 List<POJO>我想从中提取数据和我感兴趣的变量是:

  • Environment: String
  • Application: String
  • Throughput: Double

有 7 Environment对象和每个 Environment有 18 Application对象,每个对象都有多个 values .

我正在尝试遍历 List<POJO>并将这些值存储在 Hashmap<Environment.ToString, Hashmap<Applications.ToString, List<Double>>

我正在尝试使用 Java 8 的 Lambda 功能;到目前为止我的代码:

private HashMap<String, List<BigDecimal>> appMap = new HashMap<String, List<BigDecimal>>();
private HashMap<String, HashMap> envMap = new HashMap<String, HashMap>();

for(POJO chartModel: List<POJO>) {
appMap.computeIfAbsent(chartModel.getName(), v -> new ArrayList<BigDecimal>())
.add(BigDecimal.valueOf(chartModel.getThroughput()));
envMap.put(chartModel.getEnvironment(), appMap);
}

首先,是否有一种遍历 List 的简写方法?里面里面Map使用 Java8

其次,我的代码不太正确,所以目前 map 添加了所有 Throughput Application 的值键,所以我最终得到 18 个键和一个值列表。

我需要它做的是在我的 envMap 中我应该有 7 Environment对象,每个对象都有其 18 Application对象和值,所以会有 126 Application对象的总数。这可以按照我尝试的方式实现吗,是否有 Lambda 方法来实现它?

最佳答案

您需要使用 2 个操作分组:第一个根据环境分组,第二个根据名称分组。最后,您需要将每个值映射到 BigDecimal他们吞吐量的值(value)。

假设pojoList<POJO> :

Map<String, Map<String, List<BigDecimal>>> result =
pojo.stream()
.collect(Collectors.groupingBy(
POJO::getEnvironment,
Collectors.groupingBy(
POJO::getName,
Collectors.mapping(p -> BigDecimal.valueOf(p.getThroughput()), Collectors.toList())
)
));

关于Java 8 lambda 添加到 Hashmap 中的列表,在 Hashmap 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872488/

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