java - 是否有可能在 Stream 中获取下一个元素?

标签 java java-8 functional-programming java-stream

我正在尝试将 for 循环 转换为功能代码。我需要向前看一个值,也需要向后看一个值。是否可以使用流? 下面的代码是将罗马文本转换为数值。 不确定具有两个/三个参数的 reduce 方法是否可以提供帮助。

int previousCharValue = 0;
int total = 0;
    
for (int i = 0; i < input.length(); i++) {
    char current = input.charAt(i);
        
    RomanNumeral romanNum = RomanNumeral.valueOf(Character.toString(current));
        
    if (previousCharValue > 0) { 
        total += (romanNum.getNumericValue() - previousCharValue);
        previousCharValue = 0;
    } else {
        if (i < input.length() - 1) {
        
            char next = input.charAt(i + 1);
            RomanNumeral nextNum = RomanNumeral.valueOf(Character.toString(next));
            if (romanNum.getNumericValue() < nextNum.getNumericValue()) {
                previousCharValue = romanNum.getNumericValue();
            }
        }
        if (previousCharValue == 0) {
            total += romanNum.getNumericValue();
        }
            
    }
        
}

最佳答案

不,使用流是不可能的,至少不容易。流 API 从处理元素的顺序中抽象出来:流可以并行处理,也可以以相反的顺序处理。因此流抽象中不存在“下一个元素”和“前一个元素”。

您应该使用最适合该工作的 API:如果您需要对集合的所有 元素应用一些操作并且您对顺序不感兴趣,则流非常适合。如果您需要按特定顺序处理元素,则必须使用迭代器或者可能通过索引访问列表元素。

关于java - 是否有可能在 Stream 中获取下一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31650157/

相关文章:

java - 解析 xml 文件中引用 xml 文件的实体 (android)

scala - 一关一滑?

java - 如何使用扫描仪读取文件并将值存储在二维数组中

java - 漫反射着色和环境着色

java - 如何使用 Java 8 中新的 Date-Time API 获取当前时间?

java - 记录密码查询

java - 从 JDK 1.5.0_06 迁移到 1.8.0_66 - 替换已弃用的 Java JPEG 类

algorithm - Haskell中的精确流量控制

scala - Scala中的Corecursion vs Recursion理解

java - Spring全局事务在获取元素后提交