java – 如何通过实例获取列表的所有元素?
发布时间:2020-12-14 05:37:38 所属栏目:Java 来源:网络整理
导读:如何按实例获取列表的所有元素? 我有一个列表,可以有一个接口Foo的任何类实现: interface Foo;class Bar implements Foo; 我想使用java8 stream api提供一个实用程序方法来提取特定类类型的所有元素: public static T extends Foo ListT getFromList(List
如何按实例获取列表的所有元素?
我有一个列表,可以有一个接口Foo的任何类实现: interface Foo; class Bar implements Foo; 我想使用java8 stream api提供一个实用程序方法来提取特定类类型的所有元素: public static <T extends Foo> List<T> getFromList(List<Foo> list,Class<T> type) { return (List<T>) list.stream().filter(entry -> type.isInstance(entry)).collect(Collectors.toList()); } 使用: List<Foo> list; List<Bar> bars = Util.getFromList(list,Bar.class); 结果:它可以工作,但由于未经检查的强制转换(List< T>),我必须添加@SuppressWarnings.我怎么能避免这个? 解决方法
引入扩展S的另一个类型参数是正确的,但是,为了将结果作为List< S>而不是List< T>,您必须.map()将类型:: isInstance谓词传递给S.
public static <T extends Foo,S extends T> List<S> getFromList(List<T> list,Class<S> type) { return list.stream() .filter(type::isInstance) .map(type::cast) .collect(Collectors.toList()); } 正如@Eran所建议的那样,这甚至可以简化为仅使用一个类型参数: public static <T extends Foo> List<T> getFromList(List<Foo> list,Class<T> type) { return list.stream() .filter(type::isInstance) .map(type::cast) .collect(Collectors.toList()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |