我正在尝试将for循环转换为功能代码.我需要向前看一个值,也可以看一个值.是否可以使用流?
以下代码将罗马文本转换为数值.
不确定如果使用两个/三个参数的reduce方法可以帮助这里.
以下代码将罗马文本转换为数值.
不确定如果使用两个/三个参数的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:如果您需要对集合的所有元素应用一些操作,并且您对订单不感兴趣,则流优秀.如果您需要以某种顺序处理元素,则必须使用迭代器,或者通过索引访问列表元素.