当前位置: 首页 > 知识库问答 >
问题:

是否可以将collect(collectors.tolist()的返回类型转换为LinkedList?

谭敏学
2023-03-14
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class fillRandom {
    public static List<Integer> IntFill(){
        return  new Random().ints(10,0,100).boxed().collect(Collectors.toList());

    }
}

public class Main {

    public static void main(String[] args) throws Exception {
        List linkedList = new LinkedList<Integer>();
        Print printer = new printImpl();
        linkedList = (LinkedList) fillRandom.IntFill();
        printer.print(linkedList);

    }

}

共有1个答案

令狐良骏
2023-03-14

根据ToList的文档,不能保证返回的列表类型,它特别要求您使用ToCollection

对返回的列表的类型、可变性、序列化性或线程安全性没有任何保证;如果需要对返回的列表进行更多的控制,请使用toCollection(供应商)

如果您不使用ToCollection的原因只是为了避免使用IntFill中的特定实现,并且希望允许调用方指定他们想要的List,那么您可以使用Supplier参数给用户该选项,就像ToCollection所做的那样。

public static <C extends Collection<Integer>> C intFill(Supplier<C> collectionSupplier){
    return new Random().ints(10,0,100).boxed()
        .collect(Collectors.toCollection(collectionSupplier));
}

用法:

List<Integer> linkedList = fillRandom.intFill(LinkedList::new);

或者,使用LinkedList构造函数从ToList收集器返回的List创建LinkedList列表,而不是强制转换。

List<Integer> linkedList = new LinkedList<>(fillRandom.intFill());

请注意,这样做的一个缺点是,它将再次循环整个列表,这可能是不可取的。

 类似资料:
  • 问题内容: 有没有一种方法可以将对象强制转换为方法的返回值?我尝试过这种方式,但在“ instanceof”部分给出了编译时异常: 我也尝试过这个,但是它给出了运行时异常ClassCastException: 有没有一种简便的方法可以做到这一点: 编辑:我写了正确答案的工作副本: 问题答案: 您必须使用实例,因为在编译过程中会擦除通用类型。 该方法的声明是: 这也可以用于数组类型。它看起来像这样:

  • 有没有一种简单的方法可以做到这一点: 编辑:我写了一份正确答案的工作副本:

  • 我正在编写一个code-gen工具,用于使用Spring-Data-Jpa为Spring-boot应用程序生成后端连接代码,CrudRepository中的方法返回Iterable而不是List,这让我有点恼火,因为Iterable没有提供足够的功能,但是List提供了,所以我正在寻找将Iterable转换为List的最佳方法。 我看到了这篇关于将可迭代转换为集合的文章,我想知道,与其使用像Gua

  • 问题是,如果我执行上述^,以访问endpoint上的请求信息,则如果筛选器验证失败,我就不能再中止筛选器中的请求,因为我会得到以下错误: 似乎如果您在Jerseyendpoint上定义任何类型的参数,这些参数可以在ContainerRequestContext中访问,那么它将不允许您中止过滤器中的过滤器链。 一个解决方法(我还没有尝试过,但假设会成功)是这样做:如果过滤器验证失败,我可以只向请求添

  • 方法(下面)是一个类型,我用作参数的类是一个。我想知道我选角的方式是否管用: 这就是方法: 此URL指向类: 我把它放进了粘贴箱,因为课程太长了。

  • 我有一个函数从服务器获取一个文件并解析了该文件,我正在使用一个具有如下完成处理程序的函数来获取该文件 但是,当我尝试使用该函数时 我得到无法将类型“()”的返回表达式转换为返回类型“String”的错误。 知道我做错了什么吗?