Làm cách nào để chuyển đổi ngắn [] thành Danh sách <Short> trong Java với các luồng?


8

Tôi hình dung tôi có thể ngoại suy từ câu hỏi này nhưng tôi không thể

Tất nhiên tôi có thể làm

short[] shortarray = {0,1,2};
List<Short> shortList = new ArrayList<Short>();
for (Short s : shortarray) {
    shortList.add(s);
}

Nhưng tôi đang tự hỏi làm thế nào để làm điều đó với các luồng.

List<Short> shortList = Arrays.stream(shortarray).boxed()
                              .collect(Collectors.toList());

không làm việc chẳng hạn nhưng sản lượng The method stream(T[]) in the type Arrays is not applicable for the arguments (short[])

Câu trả lời:


9

Tại sao không

IntStream.range(0, shortarray.length)
         .mapToObj(s -> shortarray[s])
         .collect(Collectors.toList());

Tại sao mapToObjvà không mapToInt(hoặc đồng bằng map)? sử dụng IntStreamthay thế Stream<Integer>nên được ưu tiên trong hầu hết các tình huống khi một người đang xử lý ints nguyên thủy hoặc quần short.
Polygnome

mapToIntcuối cùng thu thập một List<Integer>ví dụ, không phải a List<Short>.
Sachith Dickwella

1
@Polygnome Tôi tin rằng bạn có một điểm, nhưng OP đang thu thập các yếu tố thành một List<Short>, vì vậy không thể tránh khỏi quyền anh.
ernest_k

1
@Polygnome, trong hầu hết các tình huống, ngoại trừ khi nhiệm vụ là sản xuất a List<Short>. Không phải là tôi từng gặp phải một nhu cầu như vậy trong đời thực
Holger

1

Về lý do tại sao nó không hoạt động với một đoạn ngắn []:

không có loại Stream ngắn. Luồng chỉ hoạt động cho các loại không nguyên thủy hoặc với IntStream, LongStream và DoubleStream .

Để nó hoạt động, bạn sẽ phải chuyển đổi quần short của mình thành kiểu dữ liệu với Luồng tương thích, ví dụ Ngắn hoặc có thể để int cho một IntStream (xem câu trả lời của ernest_k).


Có, bạn không thể bỏ nó, nhưng bạn có thể chuyển đổi từng mục. Tôi đã làm rõ rằng trong một chỉnh sửa. Tôi cảm thấy "tại sao" cũng quan trọng cho câu trả lời và nên được đưa vào.
lugiorgi

0

Có một cách khác để bạn có thể chuyển đổi mảng ngắn thành một bộ sưu tập.

  1. Chuyển đổi ngắn thành mảng đối tượng ngắn
  2. Sử dụng phương thức Arrays.asList để chuyển đổi Short [] thành List và sau đó lặp lại chúng bằng các luồng.

Xem mã mẫu bên dưới,

Short[] shortarray = {0,1,2}; List<Short> shortList1 = Arrays.asList(shortarray); shortList1.stream().forEach(aShort -> {System.out.println(aShort);});

Hi vọng điêu nay co ich.

Cảm ơn Sandy


OP muốn chuyển đổi short[]khôngShort[]
Karthikeyan Vaithilingam

Trên thực tế, Arrayslớp chỉ coi int, long, double hoặc bất kỳ loại Object nào làm tham số tại thời điểm này. Vì vậy, câu trả lời đơn giản là "không thể" tại thời điểm này ngắn như tham số cho phương thức truyền phát của lớp Mảng. Lưu ý: Ý kiến ​​của tôi được chuyển sang hỗ trợ Arrays.stream param là hợp lệ cho đến khi java 1.8 từ đánh giá tài liệu của tôi.
Sandy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.