作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一个第三方库,其中有两个非常相似的类,但没有实现接口(interface)。该代码当前循环遍历项目列表,以使用这些类之一查找对象的第一次出现,然后将其转换为进行处理的流。如果我可以将此代码转换为使用流并将其链接到我的代码的其余部分,那就太好了。
for (Component3Choice component: components) {
if (component instanceof OptionalComponent3Bean) {
OptionalComponent3Bean section = (OptionalComponent3Bean) component;
entryStream = section.getSection().getEntry().stream()
break;
}
else if (component instanceof RequiredComponent3Bean) {
RequiredComponent3Bean section = (RequiredComponent3Bean) component;
entryStream = section.getSection().getEntry().stream();
break;
}
}
... do something with the stream ...
components.stream()
.filter(entry -> entry instanceof OptionalComponent3Bean
|| entry instanceof RequiredComponent3Bean)
.findFirst()
.map( {{ cast entry }} )
.map( castedEntry.getSection().getEntry())
... continue on with my processing
是否可以根据流中先前的过滤器来转换条目?
最佳答案
不,没有什么可以让你避免糟糕的设计,而这似乎正是你所反对的。
如果您需要在许多地方复制与此类似的样板文件,您可以通过包装器强制使用通用接口(interface)。否则,我想你能做的最好的就是
static private IDontKnow getStream(Component3Choice c3c) {
if (c3c instanceof OptionalComponent3Bean) {
return ((OptionalComponent3Bean)c3c).getStream();
} else if (c3c instanceof RequiredComponent3Bean) {
return ((RequiredComponent3Bean)c3c).getStream();
} else {
return null;
}
}
components.stream()
.map(x -> getStream(x))
.filter(x -> x!=null)
.findFirst()
.map(x -> x.getEntry().stream());
... continue on with yout processing
关于java - 如何在 Java 8 流中转换具有不同类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988491/
我是一名优秀的程序员,十分优秀!