我想创建一个城市名称列表。我知道两种方式。
List<String> cities = Stream.of("Paris", "London", "New York", "Tokyo").collect(Collectors.toList());
List<String> cities = Arrays.asList("Paris", "London", "New York", "Tokyo");
Stream.of(..).collect(..)
和Arrays.asList(..)
之间有什么区别?
答案 0 :(得分:7)
Stream.collect()
将返回一个非固定大小的List<>
(当前实现为toList()
)
List<String> cities = Stream.of("Paris", "Tokyo").collect(Collectors.toList());
cities.add("foo"); // OK
如果创建基本List
,则无法使用Stream
,在收集数据之前需要进行操作时使用它们,例如过滤器,地图,...... / p>
Arrays.asList()
将返回固定大小的List<>
:see Documentation
List<String> cities = Arrays.asList("Paris", "London", "New York", "Tokyo");
cities.add("bar"); // NOK : java.lang.UnsupportedOperationException
当您快速需要List
元素,迭代或其他简单但不再需要时,可以使用此方法,然后使用List
的实现返回到第1点。
构建.collect(Collectors.toCollection(ArrayList::new));
可以保证返回的列表是可变的,就像toList
there are no guarantees on the type, mutability, serializability, or thread-safety of the List returned