我有一个Set<MultiAdminComponent> rootItems = new HashSet<>();
HashSet。
在这里,我拥有所有 Screen.
在我的HashSet
中,我将拥有所有行。我想根据MultiAdminComponent
对rowId
进行排序。
这是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
答案 0 :(得分:3)
由于您使用的是Java 8,因此可以使用Stream API
和Comparator.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;
}
}