Java流:找到两个流之间不同的第一个项目

时间:2016-10-12 20:37:50

标签: java java-stream

假设我有两个具有相似但不一定相同的内容的流。如何找到两者之间不同的第一个项目。例如,假设我有:

const GLuint planeDimension = 30.0f;
const GLuint half = planeDimension / 2;
const GLuint verticesCount = planeDimension * planeDimension;
int counter = 0;
GLfloat planeVertices[verticesCount];

for (GLuint length = 0; length < planeDimension; length++) {
    for (GLuint width = 0; width < planeDimension; width++) {
        planeVertices[counter++] = length - half;
        planeVertices[counter++] = 0.0f;
        planeVertices[counter++] = width - half;
    }
}

如何确定“b”和“x”是流不同的第一项?如果其中一个流被截断呢?

2 个答案:

答案 0 :(得分:5)

这不是流可以为您做任何有用的事情的用例。没有内置的方法来执行此操作,这比将流转换为Iterator并以更传统的方式比较它们更好,或者首先不使用流。

为了更传统地做到这一点,有两个Collection,我会写

Iterator<String> itr1 = collection1.iterator();
Iterator<String> itr2 = collection2.iterator();
for (int i = 0; itr1.hasNext() && itr2.hasNext(); i++) {
  if (!itr1.next().equals(itr2.next())) {
    System.out.println(i);
    break;
  }
}

答案 1 :(得分:3)

流在内部数据上工作,而迭代器在外部上工作。有两个步行(流或迭代器),至少应该有一个在外面。

因为你必须为第一个lambda重复创建第二个流。

如果两个流保持相同的顺序,则可以使用完整的Stream解决方案。有点像:

Xamarin.Forms

在这里创建两个Runnables的线程,将它们的下一个值放在“比较输入”中,并且输出两个输入为true / false。

可行,但一个简单的算法彻底改变了。也许是面试问题的一部分。