java流: easiest way to find adjacent value match

标签 java java-stream

如何将这个迭代的代码块转换为流?

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/

相关文章:

java - Google App Engine appcfg.py 引发值错误

java - 如何从 Android 调用 WordNet? [Android 版 Wordnet API]

java - 使用 Java Streams 获取嵌套在 HashMap 中的元素最多的集合

java-8 - 理解并行 Java 8 流产生的结果

java - 无法获取 Java 线程本地对象中存储的变量的整数值

java - 为什么我们获取不到HashSet中的有序序列

Java 8 供应商没有双冒号

java - 从流中收集对

java - 将消息从死信移回主题

java - 使用包含列表的流过滤数据?