如何比较 Java 8 中的两个流

新手上路,请多包涵

在 Java 8 中比较两个 Stream 实例并找出它们是否具有相同元素的好方法是什么,特别是为了单元测试的目的?

我现在得到的是:

 @Test
void testSomething() {
  Stream<Integer> expected;
  Stream<Integer> thingUnderTest;
  // (...)
  Assert.assertArrayEquals(expected.toArray(), thingUnderTest.toArray());
}

或者:

 Assert.assertEquals(
    expected.collect(Collectors.toList()),
    thingUnderTest.collect(Collectors.toList()));

但这意味着我正在构建两个集合并丢弃它们。考虑到我的测试流的大小,这不是性能问题,但我想知道是否有一种规范的方法来比较两个流。

原文由 Vlad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 584
2 个回答
static void assertStreamEquals(Stream<?> s1, Stream<?> s2) {
    Iterator<?> iter1 = s1.iterator(), iter2 = s2.iterator();
    while(iter1.hasNext() && iter2.hasNext())
        assertEquals(iter1.next(), iter2.next());
    assert !iter1.hasNext() && !iter2.hasNext();
}

原文由 ZhongYu 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 Guava 库中的 elementsEqual 方法:

 Iterators.elementsEqual(s1.iterator(), s2.iterator())

原文由 Lii 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏