我正在尝试将 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/