gpt4 book ai didi

java-8 - 将逻辑转换为 Streams (Java)(嵌套 for 循环与计数器)

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

亲爱的,

我是 Streams 的新手,想将一些逻辑转换为使用它们:

逻辑是这样的:

    for (String headerKey : map.keySet()) {
int counter = 1;
for (String value : map.get(headerKey)) {
if (map.get(headerKey).size() != 1) {
System.out.println("Response header: " + headerKey + "[" + counter++ + "]: " + value);
} else {
System.out.println("Response header: " + headerKey + ": " + value);
}
}
}

问题是“计数器”...

我得到了:

private static long after(Map<String, List<String>> map) {

return map.keySet().stream().map(key -> output(key, map)).count(); // use print() here instead of output()
}

private static String output(String key, Map<String, List<String>> map) {

counter = 1;

long longString = map.get(key).stream().map(value -> print(value, key, map.get(key))).count();

return "" + longString;
}

private static String print(String value, String key, List<String> strings) {

if (strings.size() != 1) {
System.out.println("Response header: " + key + "[" + counter++ + "]: " + value);
} else {
System.out.println("Response header: " + key + ": " + value);
}

return "";
}

我想我可以把 print() 方法放在指定的位置,

但我不知道如何让计数器的行为与原始代码中的一样...

欢迎所有评论/想法:)

谢谢!

最佳答案

像这样创建一个辅助方法

static Stream<String> values(List<?> list) {
return list.size() == 1? Stream.of(": " + list.get(0)):
IntStream.range(0, list.size()).mapToObj(ix -> "[" + ix + "]: " + list.get(ix));
}

它不是在每次迭代中重新评估 list.size() == 1 条件,而是预先选择正确的操作形状。当大小不是一个时,与其尝试维护一个计数器,不如首先流过索引范围。

现在可以在 map 上流式传输时使用此方法,例如

map.entrySet().stream()
.flatMap(e -> values(e.getValue()).map(("Response header: " + e.getKey())::concat))
.forEach(System.out::println);

关于java-8 - 将逻辑转换为 Streams (Java)(嵌套 for 循环与计数器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69944016/

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