如何在一行中初始化 List<Short>?

How to initialize List<Short> in one line?

如何在一行中初始化一个短元素列表?

像这样:

List<Short> numbers = new ArrayList<Short>(List.of(1, 2, 3, 4, 5));

但我得到:

"Cannot resolve constructor 'ArrayList(java.util.List<E>)'"

类型 ArrayList 声明为:

public class ArrayList<E> ... {
    public ArrayList(Collection<? extends E> c) { ... }
}

这意味着在你的声明中

List<Short> numbers = new ArrayList<>( ... );

您传递给构造函数的参数必须是 Collection<? extends Short> 类型。但是你正在传递一个

List.of(1, 2, 3, 4, 5)

类型为List<Integer>。请注意,整数文字默认为 int。不幸的是,没有简短 的方法来制作它们short。但是你可以随时投射它们:

List<Short> numbers = new ArrayList<>(List.of((short) 1, (short) 2, (short) 3, (short) 4, (short) 5));

这编译得很好。

旁注:为什么您需要创建另一个列表对象 (new ArrayList(...)) 而已经有一个 (List.of(...))?

使用Integer.shortValue()方法:如下

  List<Short> numbers = Stream.of(1, 2, 3, 4, 5).map(value -> value.shortValue()).collect(Collectors.toList());