gpt4 book ai didi

Java Stream Api 反转数据结构并标准化变量

转载 作者:行者123 更新时间:2023-12-02 01:26:30 25 4
gpt4 key购买 nike

我有一个Home类(class)。这个类有一个数组,我必须将这个数据结构转换为 Map<AddressList, Number>使用 java 流 api。 Number值将针对同一个 Home 中的每个地址重复目的。我该怎么做?谢谢。

class Home {
private Long number;
private List<String> addressList;
// getters, setters, constructor
}

class AnotherClass {
List<Home> homeList = ....;

// do something here and result
Map<String, Long> barcodeNumberMap = ...;
}
<小时/>

解决方案

感谢您的回复。最后的代码;

public void test() {
List<Home> homeList = new ArrayList<>();
Home h = new Home();
List<String> barcode1List = new ArrayList<String>();
barcode1List.add("b11");
barcode1List.add("b12");
h.setBarcodeList(barcode1List);
h.setNumber(100L);

Home h2 = new Home();
List<String> barcode2List = new ArrayList<String>();
barcode2List.add("b21");
barcode2List.add("b22");
h2.setBarcodeList(barcode2List);
h2.setNumber(200L);

homeList.add(h);
homeList.add(h2);

Map<String, Long> resultMap = homeList.stream()
.flatMap(home -> home.getBarcodeList().stream()
.map(addr -> new SimpleEntry<String, Long>(addr, home.getNumber())))
.collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));

System.out.println(resultMap);

}

和输出:

{b21=100, b12=200, b11=200, b22=100}

最佳答案

拥有:

List<Home> homeList = ....;
... your work ...
Map<String, Long> barcodeNumberMap = ...;

那么第一问题应该是如何填充最终的 map 。这是通过 .collect(Collectors.toMap(keyGetter, valueGetter)) 完成的.

Map<String, Long> result =
some obj stream of string and long
.collect(Collectors.toMap(obj::getString, obj::getLong);

然后是homeList家:弦又长又多,必须压扁。这基本上可以将 10 个每户有 20 根绳子的房屋压扁为 200 对长绳子。可能可以假设每个字符串值都是唯一的。

一个Stream<Pair<String, long>>将完成为

homeList.stream()
.flatMap(home ->
home.addressList.stream()
.map(addr -> Pair<String, Long>(addr, list.number)));

是一件为内部的家到外面的作品:一个家可以变成一个Stream<Pair<String, Long>>然后,flatMap 会展平多个流。

由于这看起来像是家庭作业,所以我就到此为止。

关于Java Stream Api 反转数据结构并标准化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836901/

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