gpt4 book ai didi

带有 instanceof 和 class cast 方法引用的 Java 流

转载 作者:行者123 更新时间:2023-12-04 02:45:05 27 4
gpt4 key购买 nike

我可以使用方法引用转换以下代码吗?

List<Text> childrenToRemove = new ArrayList<>();

group.getChildren().stream()
.filter(c -> c instanceof Text)
.forEach(c -> childrenToRemove.add((Text)c));

让我举一个例子来说明我的意思,假设我们有
myList
.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(elem -> System.out.println(elem));

使用方法引用它可以写成(最后一行)
myList
.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);

将表达式转换为方法引用的规则是什么?

最佳答案

是的,您可以使用这些方法引用:

.filter(Text.class::isInstance)
.map(Text.class::cast)
.forEach(childrenToRemove::add);

您可以使用 Collectors.toSet() 收集流项目而不是 for-each-add :
Set<Text> childrenToRemove = group.getChildren()
// ...
.collect(Collectors.toSet());

使用 toList() 如果你需要维护 children 的秩序。

如果签名匹配,您可以通过应用以下规则将 lambda 表达式替换为方法引用:
ContainingClass::staticMethodName // method reference to a static method
containingObject::instanceMethodName // method reference to an instance method
ContainingType::methodName // method reference to an instance method
ClassName::new // method reference to a constructor

关于带有 instanceof 和 class cast 方法引用的 Java 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44158551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com