首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用java 8流对对象进行排序

如何使用java 8流对对象进行排序
EN

Stack Overflow用户
提问于 2018-02-02 23:27:45
回答 3查看 8.3K关注 0票数 5

我正在使用java8中的stream API来处理我的集合。但是,我想知道使用此API按给定顺序对对象进行排序的一种优雅方法是什么。

代码语言:javascript
复制
SortedCollection = inputCollection.stream()
    .map(e -> {
        return new Element(e.id, e.color);
    }).collect(Collectors.toList());

在这里,我想使用id属性对已映射的元素进行排序。

有什么想法吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-02 23:31:18

只需使用如下所示的Stream#sorted,并使用Element ID的getter方法的名称。

代码语言:javascript
复制
inputCollection.stream()
               .map(e -> new Element(e.id, e.color))
               .sorted(Comparator.comparing(Element::getId))
               .collect(Collectors.toList());
票数 12
EN

Stack Overflow用户

发布于 2018-10-19 06:44:40

完整的详细示例:可能对starter on Stream类有帮助。

代码语言:javascript
复制
  public class Employee {
        String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getSalary() {
            return salary;
        }

        public void setSalary(int salary) {
            this.salary = salary;
        }

        int salary;

        public Employee(String n, int s) {
            this.name = n;
            this.salary = s;
        }

        @Override
        public String toString() {
            return "[" + name + ", " + salary + "]";
        }

        public static void main(String[] args) {
            List<Employee> list = new ArrayList<Employee>() {
                {
                    add(new Employee("Joe", 50000));
                    add(new Employee("Jim", 75000));
                    add(new Employee("Tom", 80000));
                    add(new Employee("Jim", 70000));
                    add(new Employee("Steve", 55000));
                    add(new Employee("Jim", 100000));
                    add(new Employee("Joe", 59000));
                    add(new Employee("Rich", 88000));
                }
            };
            List<Employee> listSorted = new ArrayList<Employee>();
            Comparator<Employee>  NameCommparator = Comparator.comparing(Employee::getName);
            listSorted = list.stream().sorted(NameCommparator).collect(Collectors.toList());

            System.out.println(listSorted);

//sorting on descending order
            Comparator<Employee>  SalaryCommparator = Comparator.comparing(Employee::getSalary);
            listSorted = list.stream().sorted(SalaryCommparator.reversed()).collect(Collectors.toList());
            System.out.println(listSorted);


        }
    }
票数 1
EN

Stack Overflow用户

发布于 2018-02-02 23:35:32

也许可以试试这个

代码语言:javascript
复制
SortedCollection = inputCollection.stream()
                .map(e -> {
                    return new Element(e.id, e.color);
                })
                .collect(Collectors.collectingAndThen(Collectors.toList(), l -> l.sort(yourComparator)));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48585873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档