【问题标题】:How to save this stream thing into a variable如何将此流的东西保存到变量中
【发布时间】:2020-11-16 06:46:39
【问题描述】:

我正在打印这个功能。

listaITSAV.stream().sorted().forEach(System.out::println);

但我想将此列表的排序保存在一个变量中,然后打印包含排序的变量。

注意:ListaITSAV 是一个 LinkedList

LinkedList<String> listaITSAV = new LinkedList<String>();

【问题讨论】:

    标签: java sorting lambda functional-programming stream


    【解决方案1】:

    您可以使用peek() 并阅读此question 以了解更多信息。

    listaITSAV.stream().sorted().peek(System.out::println).collect(Collectors.toList());
    

    【讨论】:

      【解决方案2】:

      一种方法是将流本身存储在一个变量中。

      Stream<String> stream = listaITSAV.stream().sorted();
      
      //...some code...
      
      stream.forEach(System.out::println);
      

      注意:如果流已经被操作或关闭,我们不能对它执行任何进一步的操作。

      例如,尝试做这样的事情:

      stream.forEach(System.out::println);
      stream.forEach(System.out::println);
      

      将导致 java.lang.IllegalStateException
      消息,流已被操作或关闭。 p>

      【讨论】:

        【解决方案3】:

        假设 listalTSAV 已经声明,而不是 null,并且填充了您想要排序的所有值,您可以简单地收集结果并重新分配回变量,如果它不是 final 像这样:

        LinkedList<String> listaITSAV = new LinkedList<>();
        …
        listaITSAV = listaITSAV.stream().sorted().collect(Collectors.toCollection(LinkedList::new));
        

        这里是 Collectors#toCollection 的 Oracle documentation

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多