我希望按照对象的电子邮件地址对其进行排序。
这是我尝试过的方法,但是没有用,但是我什至不确定这是否是执行我想要的正确方法?
public static ArrayList<Billing> sortedListByEmail(ArrayList<Billing> Billing) {
ArrayList<Billing> Sort = new ArrayList<Billing>();
for (int i = 0; i < Sort.size(); i++) {
Collections.sort(Sort, new Comparator<Billing>() {
public int compare(Billing o1, Billing o2) {
return o1.getEmail() > o2.getEmail() ? -1 : o1.getEmail().equals(o2.getEmail() ? 0 : 1);
}
});
}
return Sort;
}
班级休息时间:
import java.util.ArrayList;
import java.util.Collections;
import java.lang.Comparable;
import java.util.Comparator;
public class Billing extends User implements Comparable<User> {
private Address billingAddress;
private String email;
public Billing(String id, String firstName, String lastName, String userName, String password, UserType userType, PermissionType permission, Boolean Status, Address billingAddress, String email) {
super(id, firstName, lastName, userName, password, userType, permission, Status);
this.billingAddress = billingAddress;
this.email = email;
}
public Billing(String id, String firstName, String lastName, String userName, String password, UserType userType, PermissionType permission, Boolean Status, String email) {
super(id, firstName, lastName, userName, password, userType, permission, Status);
}
public Billing(String id, String firstName, String lastName, String userName, String password, UserType userType, PermissionType permission, Boolean Status) {
super(id, firstName, lastName, userName, password, userType, permission, Status);
}
public Address getBillingAddress() {
return billingAddress;
}
public void setBillingAddress(Address billingAddress) {
this.billingAddress = billingAddress;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
我将如何按照对象的电子邮件地址对对象进行排序?谢谢
答案 0 :(得分:2)
尝试以下代码:
billingList.sort(Comparator.comparing(a -> a.getEmail));
答案 1 :(得分:2)
由于email
是String
也是Comparable
,因此您可以使用String.compareTo
通过email
属性进行排序。 (这是Java-8之前的解决方案):
public static List<Billing> sortedListByEmail(List<Billing> Billing) {
List<Billing> sort = new ArrayList<>(Billing);
Collections.sort(sort, new Comparator<Billing>() {
public int compare(Billing o1, Billing o2) {
return o1.getEmail().compareTo(o2.getEmail());
}
}
);
return sort;
}
在Java-8中,可以使用Comparator#comparing
使它更紧凑:
public static List<Billing> sortedListByEmail(List<Billing> Billing) {
List<Billing> sorted = new ArrayList<>(Billing);
sorted.sort(Comparator.comparing(b -> b.getEmail()));
return sorted;
}
此处提供的原始列表未在适当位置排序,而是制作了一份副本进行排序。
或者您可以使用Stream#sorted
以一种优雅的方式进行操作,这也将返回一个新的List
而不是修改原始的{1>}:
public static List<Billing> sortedListByEmail(List<Billing> Billing) {
return Billing.stream()
.sorted(Comparator.comparing(b -> b.getEmail()))
.collect(Collectors.toList());
}
答案 2 :(得分:0)
如果您想使用旧方法,请使用以下代码
public static ArrayList<Billing> sortedListByEmail(ArrayList<Billing> Billing) {
Collections.sort(Billing, new Comparator<Billing>() {
public int compare(Billing o1, Billing o2) {
return o1.getEmail().compareTo(o2.getEmail());
}
});
return Billing;
}
您在代码中做错的几件事-
首先-return o1.getEmail() > o2.getEmail() ? -1 : o1.getEmail().equals(o2.getEmail() ? 0 : 1);
,您无法比较字符串值(例如整数值)。
第二个-您正在创建一个空数组列表并对其进行排序。它没有元素,为空。
ArrayList<Billing> Sort = new ArrayList<Billing>(); ........
Collections.sort(Sort, new Comparator<Billing>() {
具有Java 8功能,可以用以下几行代码完成
billing.sort(Comparator.comparing(b -> b.getEmail()));
答案 3 :(得分:0)
这将更改现有数组,不需要新变量,
Collections.sort(billingList, Comparator.comparing(Billing::getEmail));
答案 4 :(得分:0)
考虑到“帐单清单”对象名称为billingList
1)如果您使用的是Java 8,则可以使用以下方法进行操作:
使用具有Lambda表达式的Collections.sort:
Collections.sort(billingList, (b1, b2) -> b1.getEmail().compareTo(b2.getEmail()));
使用列表界面的排序方法(默认方法)
billingList.sort(Comparator.comparing(Billing::getEmail));
2)如果您使用的是Java的早期版本
Collections.sort(billingList, new Comparator<Billing>() {
public int compare(final Billing b1, final Billing b2) {
return b1.getEmail().compareTo(b2.getEmail());
};
});