如何将这个迭代的代码块转换为流?
Integer prev = -1;
boolean adjacentPair = false;
for(Integer num : numberList) {
if (num.equals(prev)) {
adjacentNumberSame = true;
break;
}
prev = num;
}
return adjacentNumberSame
最佳答案
您可以使用reduce操作。示例代码:
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 2, 3);
class Result {
boolean adjacentPair = false;
Integer prevItem = null;
}
boolean adjacentPair = list.stream().reduce(new Result(),
(result, item) -> {
result.adjacentPair = result.adjacentPair || item.equals(result.prevItem);
result.prevItem = item;
return result;
},
(result1, result2) -> {
throw new UnsupportedOperationException();
}
).adjacentPair;
System.out.println(adjacentPair);
}
类(class)
Result
持有中间结果。 adjacentPair
字段指示是否遇到相邻对。 prevItem
字段保存上一项的值,该值在下一次迭代中进行比较。此函数的第三个参数是组合器,它用于并行流,此示例适用于串行流。
关于java流: easiest way to find adjacent value match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60251473/