【问题标题】:How can I use Java 8 streams to sort an ArrayList of objects by a primitive int member?如何使用 Java 8 流按原始 int 成员对对象的 ArrayList 进行排序?
【发布时间】:2018-09-01 13:23:28
【问题描述】:

这是一个示例类。我知道最简单的方法是将成员从基本类型int 更改为对象Integer 并使用stream/lambda/sorted,但可能有原因只有基本类型int,例如空格。 我如何使用流 API 对 List<DateRange>int 成员 startRange 进行排序?

List<DateRange> listToBeSorted = new ArrayList<DateRange>();


static private class DateRange
{
    private int startRange ;
    private int endRange ;
    public int getStartRange() {
        return startRange;
    }
    public void setStartRange(int startRange) {
        this.startRange = startRange;
    }
    public int getEndRange() {
        return endRange;
    }
    public void setEndRange(int endRange) {
        this.endRange = endRange;
    }
}

【问题讨论】:

  • 注意 compareTo 不适用于原始类型。它需要一个对象
  • 拥有两个整数而不是两个原始 int 成员至少需要 16 字节的开销

标签: sorting java-8 java-stream primitive


【解决方案1】:

你可以这样做,

List<DateRange> sortedList = listToBeSorted.stream()
    .sorted(Comparator.comparingInt(DateRange::getStartRange))
    .collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    我知道您要求一种方法来处理流,但如果您可以对原始列表进行就地排序,那么您不需要流。只需使用List.sort 方法:

    listToBeSorted.sort(Comparator.comparingInt(DateRange::getStartRange));
    

    【讨论】:

    • 效率更高。
    • 这两个都有帮助,谢谢。在上述情况下,我特意制作了 List 的副本,因为我在修改原始列表的同时遍历排序列表。
    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2011-10-05
    • 2011-01-13
    • 2014-11-09
    • 2015-03-16
    • 2011-05-11
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多