【问题标题】:Convert from int to Integer and sort从 int 转换为 Integer 并排序
【发布时间】:2018-05-04 06:42:46
【问题描述】:

我正在尝试从 int 转换为 List Integer 以便应用流方法对它们进行排序,但是它指出没有合适的方法。有可能这样做吗?

    public class Testsorting 
{
    public static int [] prize = {5,2,3,7,1,5,9,0,2};

    public static void main(String [] args)
    {
        List<Integer> list = Arrays.stream(prize).
                boxed().collect(Collectors.toList());

        System.out.println(list);

        List <Integer> sortedList = Arrays.stream(list) //error occured on this line
                                           .sorted()
                                           .collect(Collectors.toList());
    }
}

【问题讨论】:

  • Java 不是 Javascript。请努力找出您正在编写代码的语言的名称。
  • 使用list.stream().X
  • 我真的不明白对这个问题的反对票。问题突出的体面问题,写此评论时得分 -2。
  • 为什么要绕道? Arrays.stream(prize) 已经产生了一个流。所以你可以做一个List&lt;Integer&gt; sortedList = Arrays.stream(prize).sorted().boxed().collect( Collectors.toList()); 请注意,在boxed() 之前做sorted() 将使按自然顺序排序更有效。只有在需要自定义比较器时,您才需要 .boxed() .sorted(comparator)...
  • @Tinki 你得问问投反对票的人。不幸的是,这是一种常见的模式,即选民不会返回 a) 如果原因不再存在,则撤回投票,或者 b) 回复 cmets 询问原因。我只是推测下投票者的推理,我没有说这是有道理的。但归根结底,不值得多想。 OP在一天结束时仍然得到了加分,编辑的评论也不是太苛刻。现在,轮到 OP 接受解决问题的答案或告诉我们仍然缺少什么……

标签: java arrays sorting java-stream


【解决方案1】:

Arrays.stream(list) 更改为list.stream()

public class Main {
    public static int [] prize = {5,2,3,7,1,5,9,0,2};

    public static void main(String [] args)
    {
        List<Integer> list = Arrays.stream(prize).
                boxed().collect(Collectors.toList());

        System.out.println(list);

        List <Integer> sortedList = list.stream() //error gone on this line
                                           .sorted()
                                           .collect(Collectors.toList());

        System.out.println(sortedList);
    }
}

【讨论】:

    【解决方案2】:

    只需执行以下操作即可在一行中实现这一目标。

    Arrays.stream(prize).sorted().boxed().collect(Collectors.toList());
    

    Arrays.stream(prize).boxed().sorted().collect(Collectors.toList());
    

    .stream 转换为支持.sorted 方法ootb 的IntStream,但您不能将IntStream 直接收集到Collectors.toList() 之类的列表中,因为Stream 类支持此功能,因此我们可以使用.boxed 方法将IntStream转换为Stream,然后可以直接使用快捷方式Collectors.toList

    如果您不想通过显式调用 boxed 从 IntStream 转换为 Stream,您可以直接使用

    Arrays.stream(prize).sorted().collect(ArrayList::new,ArrayList::add,ArrayList::addAll);
    

    它也会给出相同的结果。

    【讨论】:

    • 装箱转换仍然发生在最后一个变体中,它只是被移到了ArrayList::add 函数,它需要一个对象参数。所以最后一个变种只是比使用boxed()的变种有更长的源代码,没有任何优势。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2020-07-06
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多