Pab*_*afi 6 java functional-programming java-8 java-stream
可以说我有
class Dog extends Animal {}
class Cat extends Animal {}
Run Code Online (Sandbox Code Playgroud)
我有一个动物列表使用Guava FluentIterable我可以一步过滤和转换
List<Cat> cats = FluentIterable.from(animals)
.filter(Cat.class)
.toList();
Run Code Online (Sandbox Code Playgroud)
使用Java8我需要做
List<Cat> cats = animals.stream()
.filter(c -> c instanceof Cat)
.map(c -> (Cat) c)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我无法一步完成过滤器和地图,对吗?
该map步骤在运行时是不必要的(它根本不执行任何操作),您需要它只是为了在编译期间绕过类型检查。或者,您可以使用未经检查的脏类型转换:
List<Cat> cats = ((Stream<Cat>) (Stream<?>) animals.stream().filter(
c -> c instanceof Cat)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有标准方法可以一步完成此操作,但您可以使用第三方库。例如,在我的StreamEx库中有一个select方法可以解决这个问题:
List<Cat> cats = StreamEx.of(animals).select(Cat.class).toList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |