如何排序Hashset<>按字段?

时间:2017-08-15 15:06:08

标签: java sorting java-8

我有一个Set<MultiAdminComponent> rootItems = new HashSet<>(); HashSet。 在这里,我拥有所有 Screen.

在我的HashSet中,我将拥有所有行。我想根据MultiAdminComponentrowId进行排序。

这是MultiAdminComponent

 public class MultiAdminComponent {

        private String componentName;
        private String componentIdentification;
        private String componentType;
        private String componentState;
        private String componentUrl;
        private String componentId;
        private String rowId;
        private List<MultiAdminComponent> items;
        private int componentStateId;
        private int ctastatus;
        private String actionId;
        private String actionToPerform;
        private int orderNumber;
        private int ctarevision;

如何根据MultiAdminComponent bean

中的RowId进行排序

3 个答案:

答案 0 :(得分:3)

由于您使用的是Java 8,因此可以使用Stream APIComparator.comparing()

List<MultiAdminComponent> sortedList = rootItems.stream()
   .sorted(Comparator.comparing(MultiAdminComponent::getRowId))
   .collect(Collectors.toList()); // collect to whatever you want

请记住HashSet不维护顺序,因此您应该将排序结果保存在其他一些数据结构中。

请记住,这不会对您的Set进行排序,这将会返回List自然排序的MultiAdminComponent,您需要捕获此操作的结果。< / p>

答案 1 :(得分:2)

只是为了让你知道,还有更多的套装。

  • LinkedHashSet未订购/排序
  • TreeSet按照已插入的顺序排序
  • if ... then ... else按自然顺序排序

我知道这个问题已得到解答,但是我真的无法看到使用未订购的HashSet,然后在你只能使用TreeSet时尝试订购它?

答案 2 :(得分:1)

在Java 1.8版本之前,它可以帮助你

public class Test {
    public static void main(String[] args) {
        MultiAdminComponent m1 = new MultiAdminComponent("1");
        MultiAdminComponent m2 = new MultiAdminComponent("2");
        MultiAdminComponent m3 = new MultiAdminComponent("3");
        Set<MultiAdminComponent> set = new HashSet<MultiAdminComponent>();
        set.add(m1);
        set.add(m3);
        set.add(m2);
        List<MultiAdminComponent> list = new ArrayList<MultiAdminComponent>(set);
        for (MultiAdminComponent m : list) {
            System.out.println("before" + m.getRowId());
        }
        Collections.sort(list, new Comparator<MultiAdminComponent>() {
            @Override
            public int compare(MultiAdminComponent m1, MultiAdminComponent m2) {
                return m1.getRowId().compareTo(m2.getRowId());
            }
        });
        for (MultiAdminComponent m : list) {
            System.out.println("after" + m.getRowId());
        }
    }
}

class MultiAdminComponent {
    private String rowId;

    public MultiAdminComponent(String rowId) {
        super();
        this.rowId = rowId;
    }

    public String getRowId() {
        return rowId;
    }

    public void setRowId(String rowId) {
        this.rowId = rowId;
    }

}