gpt4 book ai didi

java - java - 如何在java 8流中进行条件操作以跳过下一个流操作?

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

以传统方式,我编写了这个简单的 java for 循环

public String setString(String string) {  
StringBuilder stringBuilder = new StringBuilder();

// This for loop I want to convert into stream.
for (char c : string.toCharArray()) {
if (Character.isSpaceChar(c))
stringBuilder.append(c);
else if (isBangla(c))
stringBuilder.append(get(c));
}
return stringBuilder.toString();
}

String get(int c) {
return keyMap.getMap((char) c); // Map<Character, String> keyMap
}

boolean isBangla(int codePoint) {
return ((codePoint >= BANGLA_CHAR_START && codePoint <= BANGLA_CHAR_END) &&
(codePoint <= BANGLA_NUMBER_START || codePoint >= BANGLA_NUMBER_END)));
}

我尝试过这样的事情。

String str = string.chars()
.filter(i -> Character.isSpaceChar(i)) // if this is true need to add string
.filter(this::isBangla)
.mapToObj(this::get)
.collect(Collectors.joining());

我想要做的是,如果第一个过滤器检测到它是一个 spaceChar,那么它不会做任何进一步的流处理,而是跳转到 collect

那么我怎样才能实现这种 if/else 情况来跳过下一个流操作?提前致谢。

最佳答案

嗯,你可能会使用这样的东西:

String str = string.chars()
.filter( ch -> Character.isSpaceChar(ch) || isBangla(ch) )
.mapToObj( ch -> isBangla(ch) ? get(ch) : Character.toString((char)ch))
.collect(Collectors.joining());

如您所见,此流检查 isBangla 两次。第一次是在流中只留下空格或孟加拉语的字符,第二个是为了知道要转换哪个字符。

因为流操作是独立的——每个流都不知道在它之前的流中发生了什么——这样的操作在传统循环中编写时可能更有效。更重要的是,当您在流中运行它时,您会创建很多小字符串,您必须将所有字符转换为字符串,而不仅仅是孟加拉语。

请务必注意,您并没有在此处“跳过”任何内容。在传统循环中,您可以跳过操作。但是在流中,跳过 elements 意味着它们不会出现在最终结果中。您在流中所做的是将这些元素原封不动地传递(或者在这种情况下,从 char 更改为 String),而不是跳过。

关于java - java - 如何在java 8流中进行条件操作以跳过下一个流操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41329019/

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