java – 如何通过实例获取列表的所有元素?

前端之家收集整理的这篇文章主要介绍了java – 如何通过实例获取列表的所有元素?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何按实例获取列表的所有元素?

我有一个列表,可以有一个接口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());
}
原文链接:https://www.f2er.com/java/121978.html

猜你在找的Java相关文章