如何在一行中初始化 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());
如何在一行中初始化一个短元素列表?
像这样:
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());