gpt4 book ai didi

java - 使用 Java 流将字符串列表转换为映射列表

转载 作者:行者123 更新时间:2023-11-30 06:43:42 25 4
gpt4 key购买 nike

我有一个以下模式的字符串列表

String test ="name=john,age=28;name=paul,age=30;name=adam,age=50";
List<String> listOfStrings = Arrays.asList(test.split(";"));

我想将上面的字符串列表转换为键值对映射列表(如下所示)。

[{name=john, age=28}, {name=paul, age=30}, {name=adam, age=50}]

上面的每个条目都列出了一个 map ,其中键为名称和年龄,值为其对应的值。

这就是我为达到这个结果所做的事情。

listOfStrings.stream()
.map(record -> Arrays.asList(record.split(",")).stream().map(field -> field.split("="))
.collect(Collectors.toMap(keyValue -> keyValue[0].trim(), keyValue -> keyValue[1].trim())))
.collect(Collectors.toList());

我想知道这是否有效,或者是否有更好的方法使用 Java 流来做到这一点。

最佳答案

这是使用模式匹配的另一种替代方案,其速度不如 for 循环,但比我的测量中的原始流解决方案快得多。

public static void main(String[] args) {
String test ="name=john,age=28;name=paul,age=30;name=adam,age=50";
String patternString = "(name)=(\\w*),(age)=(\\d*)[;]?";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(test);
List<Map<String, String>> list = new ArrayList<>();

while (matcher.find()) {
Map<String, String> map = new HashMap<>();
map.put(matcher.group(1), matcher.group(2));
map.put(matcher.group(3), matcher.group(4));
list.add(map);
}
}

通过在创建 map 元素时不匹配键(姓名和年龄)并对其进行硬编码,可以略微提高性能。

关于java - 使用 Java 流将字符串列表转换为映射列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51836028/

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