jdk安装教程_JDK 16:通过一个简单的调用即可流式列出

jdk安装教程

jdk安装教程

随着Java功能流变得越来越流行,越来越多的请求要求支持新的流操作。 在这些要求大量不同的新操作的请求中, 一个似乎比其他请求更多请求的操作是直接从Stream提供List的操作。 JDK 16 Early Access Build 27引入了Stream.toList() ,它是本文的主题。

JDK 16 Early Access Build 27引入Stream.toList() ,从Stream获取List的最常见方法是调用approprite Collector

stream.collect(Collectors.toList())

这不是很多代码,而且一旦您看到它就相当简单,但是许多人都希望对这种经常使用的流操作使用更简洁的语法。 JDK 16为我们带来了这一点:

stream.toList()

进入自己的代码库并使用stream.toList()替代stream.collect(Collectors.toList())可能很诱人,但是如果代码具有直接或间接的行为可能会有所不同依赖于stream.collect(Collectors.toList())返回ArrayList的实现stream.collect(Collectors.toList())stream.toList()返回的List之间的一些关键区别在本文的其余部分中进行了阐述。

基于Javadoc的Collectors.toList()的文档指出了(强调),“返回将输入元素累积到新List中的Collector 。 还有的类型,可变性,串行化或线程安全任何保证List返回......”虽然有关于无保证‘型,可变性,串行化,或对线程安全’ List提供Collectors.toList() ,预计一些可能已经意识到这是目前一个ArrayList ,并已在依赖于一个特点的方式使用它ArrayList

以下代码段(在GitHub上列出了完整的代码)显示了一种方法,可以对Collectors.toList()Stream.toList()返回的List实现执行该方法,以了解它们的共同点以及区别。

/**
 * Analyzes the supplied {@code List} and writes to standard output
 * some key characteristics of the supplied {@code List}.
 *
 * @param listDescription Description of {@code List} to be analyzed.
 * @param listUnderAnalysis {@code List} to be analyzed.
 */
private static void analyzeList(
   final String listDescription, final List<String> listUnderAnalysis)
{
   out.println(listDescription + ": ");
   out.println("\tClass Type: " + listUnderAnalysis.getClass().getCanonicalName());
   out.println("\tAble to add to List? " + isListAddCapable(listUnderAnalysis));
   out.println("\tAble to sort List?   " + isListSortable(listUnderAnalysis));
}

当针对Stream.collect(Collectors.toList())Stream.toList()返回的List实现执行上面的简单分析代码时,输​​出如下所示。

Stream.collect(Collectors.toList()): 
	Class Type: java.util.ArrayList
	Able to add to List? true
	Able to sort List?   true
Stream.toList(): 
	Class Type: java.util.ImmutableCollections.ListN
	Able to add to List? false
	Able to sort List?   false
[NOT Stream] List.of(): 
	Class Type: java.util.ImmutableCollections.ListN
	Able to add to List? false
	Able to sort List?   false

上面示出的输出表明Stream.toList()提供了一个List的实现,是不可变的(类型ImmutableCollections.ListN类似于由提供了可以不被添加到或排序) List.of()和在对比的是可变的(可由Stream.collect(Collectors.toList())提供的ArrayList了更改和排序。 任何现有代码取决于对Stream.collect(Collectors.toList())返回的ArrayList进行突变的能力,都无法与Stream.toList()并且将引发UnsupportedOperationException

尽管Stream.collect(Collectors.toList())Stream.toList()返回的List的实现本质非常不同,但是它们仍然都实现List接口,因此在使用List.equals(对象) 。 这在GitHub上完整代码清单中得到了证明。

将方法toList()Stream接口虽然很小,但是确实使常用的技术更加方便。

翻译自: https://www.javacodegeeks.com/2020/12/jdk-16-stream-to-list-in-one-easy-call.html

jdk安装教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值