Предположим, у нас есть два потока следующим образом:
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.
Есть ли какой-нибудь удобный способ объединить два потока в [13, 1, 2, 3, 5, 6, 7, 8, 9,10, 12, 14] с использованием потокового API Java 8 (порядок не имеет значения).Или мы можем обрабатывать только один поток одновременно?
Кроме того, если два потока являются потоками объектов, как можно сохранить только отдельные объекты без переопределения методов 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
одинаковы и независимо от name
(поэтому Мэй и Мэри состоят из одного человека, потому что их числа равны «1»).).
Я нашел метод distinct()
, но этот метод основан на Object#equals()
.Если нам не разрешено перезаписывать метод equals()
, как мы можем объединить stream1
и stream2
в один поток, в котором нет повторяющихся элементов?