能否将Java流收集器返回的列表设为不可修改?

问题描述 投票:1回答:1

[使用Java流时,我们可以使用收集器来生成诸如流的集合。

例如,在此我们制作了Month枚举对象的流,并为每个对象生成一个String,其中包含月份的本地化名称。我们将结果收集到类型为ListString中。

List < String > monthNames = 
        Arrays
        .stream( Month.values() )
        .map( month -> month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) )
        .collect( Collectors.toList() )
;

monthNames.toString():[janvier,février,火星,avril,mai,juin,juillet,août,septembre,十月,十一月,décembre]]

为了得到list unmodifiable,我们可以在Java 10及更高版本中调用List.copyOf

List < String > monthNamesUnmod = List.copyOf( monthNames );

➥有没有一种方法,使带有收集器的流无需生成对List.copyOf的调用就可以生成不可修改的列表?

java list java-stream collectors unmodifiable
1个回答
1
投票

Collectors.toUnmodifiableList

是,有一种方法:Collectors.toUnmodifiableList

类似于Collectors.toUnmodifiableList,此功能内置于List.copyOf及更高版本中。相反,List.copyOfJava 10的首演出现。

在您的示例代码中,只需将最后一部分Collectors.toList更改为Collectors

Collectors

Java 8toList也是>

toList实用程序类提供了用于收集到不可修改的toUnmodifiableListList < String > monthNames = Arrays .stream( Month.values() ) .map( month -> month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ) .collect( Collectors.toUnModifiableList() ) // 🡄 Call `toUnModifiableList`. ; 以及Set中的选项。

© www.soinside.com 2019 - 2024. All rights reserved.