Java streams收集器返回的列表是否可以不修改?
在使用Java流时,我们可以使用收集器生成一个集合,例如流 例如,这里我们创建了一个月枚举对象流,并为每个对象生成一个包含该月本地化名称的字符串。我们通过调用将结果收集到字符串类型的列表中 ➥ 是否有一种方法可以让具有收集器的流生成一个不可修改的列表,而无需我包装对list.copyOf的调用?Collectors.toUnmodifiableList 是的,有一种方法: 例如,此功能内置于和更高版本中。相比之下,Collectors.toList在年首次亮相 在示例代码中,只需将最后一部分更改为toUnmodifiableList 列表Java streams收集器返回的列表是否可以不修改?,java,list,java-stream,collectors,unmodifiable,Java,List,Java Stream,Collectors,Unmodifiable,在使用Java流时,我们可以使用收集器生成一个集合,例如流 例如,这里我们创建了一个月枚举对象流,并为每个对象生成一个包含该月本地化名称的字符串。我们通过调用将结果收集到字符串类型的列表中 ➥ 是否有一种方法可以让具有收集器的流生成一个不可修改的列表,而无需我包装对list.copyOf的调用?Collectors.toUnmodifiableList 是的,有一种方法: 例如,此功能内置于和更高版本中。相比之下,Collectors.toList在年首次亮相 在示例代码中,只需将最后一部分更改
仅供参考,调用将在原始列表上创建一个视图,而不是制作单独的副本。但在这里给出的场景中,我认为这与单独的副本具有相同的效果,因为此代码吞并了原始列表。仅供参考,调用将在原始列表上创建视图,而不是创建单独的副本。但在这里给出的场景中,我认为这与单独的副本具有相同的效果,因为这段代码吞并了原始列表。这是否回答了您的问题?这回答了你的问题吗?
List < String > monthNames =
Arrays
.stream( Month.values() )
.map( month -> month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) )
.collect( Collectors.toList() )
;
List < String > monthNamesUnmod = List.copyOf( monthNames );
List < String > monthNames =
Arrays
.stream( Month.values() )
.map( month -> month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) )
.collect( Collectors.toUnModifiableList() ) // In Java 8 we could use Collectors.collectingAndThen
.
List < String > monthNames =
Arrays
.stream( Month.values() )
.map( month -> month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) )
.collect(
Collectors.collectingAndThen(Collectors.toList(),
Collections::unmodifiableList)
)
;