假设我有两个具有相似但不一定相同的内容的流。如何找到两者之间不同的第一个项目。例如,假设我有:
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”是流不同的第一项?如果其中一个流被截断呢?
答案 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。
可行,但一个简单的算法彻底改变了。也许是面试问题的一部分。