Java 8 - 在Arrays.asList和Stream.of之间的一行差异中初始化List

时间:2018-04-22 18:48:05

标签: java arrays list java-8

我想创建一个城市名称列表。我知道两种方式。

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(..)之间有什么区别?

1 个答案:

答案 0 :(得分:7)

  1. Stream.collect()将返回一个非固定大小的List<>当前实现为toList()

    List<String> cities = Stream.of("Paris", "Tokyo").collect(Collectors.toList());
    cities.add("foo"); // OK
    

    如果创建基本List,则无法使用Stream,在收集数据之前需要进行操作时使用它们,例如过滤器,地图,...... / p>

    1. 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点。

    2. 构建.collect(Collectors.toCollection(ArrayList::new));可以保证返回的列表是可变的,就像toList there are no guarantees on the type, mutability, serializability, or thread-safety of the List returned

      一样