作者:王立君淑霖_189 | 来源:互联网 | 2022-12-03 14:44
假设我们有两个流如下:
IntStream stream1 = Arrays.stream(new int[] {13, 1, 3, 5, 7, 9});
IntStream stream2 = Arrays.stream(new int[] {1, 2, 6, 14, 8, 10, 12});
stream1.merge(stream2); // some method which is used to merge two streams.
是否有任何方便的方法使用Java 8流API将两个流合并到[13,1,2,3,5,6,7,8,9,10,12,14](顺序无关紧要) .或者我们只能同时处理一个流?
此外,如果两个流是对象流,如何只保留不同的对象,而不覆盖equals()
和hashCode()
方法?例如:
public class Student {
private String no;
private String name;
}
Student s1 = new Student("1", "May");
Student s2 = new Student("2", "Bob");
Student s3 = new Student("1", "Marry");
Stream stream1 = Stream.of(s1, s2);
Stream stream2 = Stream.of(s2, s3);
stream1.merge(stream2); // should return Student{no='1', name='May'} Student{no='2', name='Bob'}
我们认为两个学生在相同时no
是相同的而且不管是什么name
(所以May和Marry是同一个人,因为他们的数字都是"1").
我找到了distinct()
方法,但这种方法是基于Object#equals()
.如果我们不能覆盖equals()
的方法,我们该如何合并stream1
以及stream2
到有没有重复的项目一个流?
1> Jigar Joshi..:
您可以使用 concat()
IntStream.concat(stream1, stream2)
@weaver为什么你会期望`concat`删除重复的项目?