var newList = someCollection.stream()
.map(x -> mapX(x))
.filter(x -> filterX(x))
.toList();
// vs.
var oldList = someCollection.stream()
.map(x -> mapX(x))
.filter(x -> filterX(x))
.collect(Collectors.toList());
(这个问题类似于stream.tolist()会比collectors.tolist()表现得更好,但侧重于行为,而不仅仅是性能。)
一个区别是stream.tolist()
提供了一个list
实现,该实现是不可变的(类型immutablecollections.listn
,不能添加或排序),类似于list.of()
提供的实现,与stream.collect()
提供的可变的(可以更改和排序)arraylist
相反。
演示:
import java.util.stream.Stream;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = Stream.of("Hello").toList();
System.out.println(list);
list.add("Hi");
}
}
产出:
[Hello]
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)
at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147)
at Main.main(Main.java:8)
import java.util.stream.Stream;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Object> list = Stream.of(null, null).toList();
System.out.println(list);
}
}
产出:
[null, null]
另一方面,list.of(null,null)
抛出NullPointerException
。
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Object> list = List.of(null, null);
}
}
产出:
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:208)
at java.base/java.util.ImmutableCollections$List12.<init>(ImmutableCollections.java:453)
at java.base/java.util.List.of(List.java:827)
at Main.main(Main.java:5)
主要内容:Java16弃用的功能,Java16移除的功能Java16弃用的功能 ThreadGroup 方法,如 stop、destroy、isDestroyed、setDaemon 和 isDaemon 方法已被弃用,并将在未来版本中删除。这些销毁线程组的 API/机制存在缺陷,这种支持显式或自动销毁线程组的方法已被最终弃用。 诸如 sigset、signal 之类的信号链 API 已过时,不推荐使用它们。sigaction 是跨平台的,并且支持多线
主要内容:Java16 instanceof的模式匹配的语法,Java16 instanceof的模式匹配示例Java 14 引入了 instanceof 运算符以将类型测试模式作为预览功能。类型测试模式有一个谓词来指定具有单个绑定变量的类型。它仍然是 Java 15 中的预览功能。在 Java 16 中,此功能现已成为标准交付的一部分。 Java16 instanceof的模式匹配的语法 Java16 instanceof的模式匹配示例 ApiTester.java 编译并运行程序 输出结果为
主要内容:Java16 Record类的示例Java 14 引入了一个新的类类型Record作为预览功能,以促进不可变数据对象的创建。Java 15 进一步增强了记录类型。在 Java 16 中,Record现在是 JDK 的标准功能。 Java16 Record类的示例 ApiTester.java 编译并运行程序 输出结果为
主要内容:Java16的新功能Java 16 是一个主要功能版本,它为 JAVA 带来了许多特定于 JVM 的更改和特定于语言的更改。它遵循 Java 发布日程推出 Java 10,并于 2021 年 3 月发布,距 Java 15 发布仅六个月。 Java 16 是非 LTS 版本。 Java16的新功能 以下是 Java 16 中引入的主要新功能。 JEP 338 : Vector API (Incubator) - 引入
本文向大家介绍& 和 && 的区别?相关面试题,主要包含被问及& 和 && 的区别?时的应答技巧和注意事项,需要的朋友参考一下 &运算符是:逻辑与;&&运算符是:短路与。 &和&&在程序中最终的运算结果是完全一致的,只不过&&存在短路现象,当&&运算符左边的表达式结果为false的时候,右边的表达式不执行,此时就发生了短路现象。如果是&运算符,那么不管左边的表达式是true还是false,右边表达
本文向大家介绍AdaBoost和GBDT的区别,AdaBoost和GBDT的区别?相关面试题,主要包含被问及AdaBoost和GBDT的区别,AdaBoost和GBDT的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: AdaBoost通过调整错分的数据点的权重来改进模型,而GBDT是从负梯度的方向去拟合改进模型。 AdaBoost改变了训练数据的权值,即样本的概率分布,减少上一轮被正