假设我们有以下两个流:
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<Student> stream1 = Stream.of(s1, s2);
Stream<Student> stream2 = Stream.of(s2, s3);
stream1.merge(stream2); // should return Student{no='1', name='May'} Student{no='2', name='Bob'}
只要他们的“No”相同,我们就认为他们是同一个学生(因此May和Marry是同一个人,因为他们的编号都是“1”)。
我找到了“distinct()”方法,但这个方法是基于“Object#equals()”。如果我们不被允许覆盖“equals()”方法,如何将“stream1”和“stream2”合并成一个没有重复项的流?
IntStream.of(13, 1, etc)
代替Arrays.stream(new int[] {13, 1, 3, 5, 7, 9});
。 - SME_Dev