如何在Java 8流中执行条件操作以跳过下一个流操作?

密封

我以传统方式编写了这个简单的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());

我要尝试做的是,如果第一个过滤器检测到它是a,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两次。第一次是在流中仅保留空格或孟加拉字符,第二次是为了知道要转换哪个字符。

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

重要的是要注意,您这里没有“跳过”任何内容。在传统循环中,您可以跳过操作但是在流中,跳过元素意味着它们将不在最终结果中。您在流中所做的是不更改地传递这些元素(或在这种情况下,从更改charString),而不跳过。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何转换一个迭代的条件为Java 8个流

如何在Java中创建一个空流?

你如何在Java 8个流做多的操作?

Java 8嵌套流:在最后一个流中返回一个值

Java 8 Lambda:遍历流对象并在流中使用上一个/下一个对象

在Java 8的操作流中执行操作

Java流sorted()行为取决于下一个takeWhile()调用

如何在Kotlin中压缩列表并跳过下一个?

在Java 8中从第一个流到下一个流api访问对象引用

REST:如何在响应正文中返回下一个操作URL?

如何创建一个可重用的张量流操作

无法理解,执行操作&arr + 1时如何在数组中计算下一个地址

在执行下一个操作之前,如何等待请求完成(Xcode 11)

如何通过检查单元格值(如果存在)对表A执行操作,并将其用作已处理的下一个执行跳过的键?

在RESTful世界中,下一个允许的操作如何在基于工作流的应用程序中返回到UI

如何在for循环内延迟操作,然后再继续执行下一个循环

如何在Java的循环链接列表中设置下一个值?

如何将两个 java8 流操作 - 一个终端和一个惰性 - 合并为一个操作?

如何在 forEach 中执行操作并将其传递给 Java 流中的 groupingBy

如何在执行下一个操作之前等待页面加载?

如何使用R中的下一个函数跳过for循环中的迭代

如何在线性布局中对齐跳过和下一个

Java 8 流 | 将流的值添加到另一个 List/Collection 而不使用 foreach 或任何终端操作

如何将每个时期的张量值保留在一层中并将其传递给张量流中的下一个时期

如何在执行下一个操作(获取)之前等待所有请求完成

如何在一个查询中执行此操作?

如何向后循环 4 个值并为列表中的下一个值执行此操作?

如何跳过递归函数中的最后一个操作?

如何创建一个操纵器来调用流中下一个对象中的特定函数?