2015-10-04 20 views
6

có cách nào để chèn phần tử T vào một số Stream<T> không?Chèn phần tử vào luồng

ArrayList<Foo> foos = new ArrayList<>(); 
    Foo foo = new Foo(); 

    Stream<Foo> stream = Stream.concat(foos.stream(), Stream.of(foo)); 

Có cách nào khác không? về cơ bản là một loại foo.stream().add(foo) ... - tất nhiên là add() không tồn tại. -

+3

gì đang làm phiền bạn về 'phương pháp concat'? – RealSkeptic

+0

@RealSkeptic tốt, lâu hơn một chút. Trông giống như một "cách giải quyết", và về hiệu suất, nhưng điều đó, tôi cần phải tìm kiếm thêm một cách trung thực. –

Trả lời

7

Không, không có cách nào khác để thêm các phần tử vào luồng nhất định trong API luồng Java chuẩn. Một số thư viện của bên thứ ba bao gồm thư viện StreamEx tôi cung cấp additional phương pháp thuận tiện để làm điều này:

Stream<Foo> stream = StreamEx.of(foos).append(foo); 

Bên trong nó sử dụng cùng một phương pháp concat.

phương pháp tương tự có sẵn trong thư viện jOOL:

Stream<Foo> stream = Seq.seq(foos).concat(foo); 
1

Giả sử rằng foos không tồn tại. Bạn có thể xây dựng một Stream với Stream.Builder thay vì một ArrayList như thế này:

Stream.Builder<Integer> builder = Stream.builder(); 
for (int i = 0; i < 10; i++) { 
    builder.accept(i); 
} 
Stream<Integer> build = builder.add(50).build(); 
// ... 
+0

Điều cần biết, có thể rất hữu ích. –

Các vấn đề liên quan