我想按字母顺序将条目排序到称为条目的ArrayList目录中。我希望将新条目添加到目录中,以将其放置在ArrayList中的适当位置。
例如,如果目录中已经有两个条目,它们的名字分别为“ Beta”和“ Cee”,并且我们想添加一个新的条目,其名字为“ Alpha”, “ Alpha”应放在第一位。
我的问题是,如何按字母顺序覆盖compareTo方法以比较两个字符串(字符串“一个”和传递给方法“姓”的另一个字符串)?
private ArrayList<Entry> entries=new ArrayList<>();
public void addEntry(String surname, String initial, String number) {
Entry entry=new Entry(surname,initial,number);
if (surname == null || initial == null || number == null)
throw new IllegalArgumentException("Please fill all the required fields, [surname,initials,number]");
else {
boolean flag = false;
for (int x = 0; x < entries.size(); x++) {
String one= entries.get(x).getSurname();
if (one.compareTo(surname)>0) {
entries.add(x,entry);
flag = true;
break;
}
}
if (!flag) {
entries.add(entry);
}
}
}
答案 0 :(得分:2)
我认为ArrayList
在这种情况下不是正确的选择,您似乎根据{中定义的Entry
方法在“正确”位置添加了新的compareTo
{1}}类。
因此,理想情况下,应使用Entry
来基本上根据TreeSet
类中定义的compareTo
来维持元素的顺序,即“默认顺序”。
Entry
class Entry implements Comparable<Entry>{
private String surname;
private String initial;
private String number;
Entry(String surname, String initial, String number){
this.surname = surname;
this.number =number;
this.initial = initial;
}
@Override
public int compareTo(Entry entry){
return this.surname.compareTo(entry.surname);
}
}
方法应该很简单:
addEntry
如果确实需要private Set<Entry> entries = new TreeSet<>();
public void addEntry(String surname, String initial, String number) {
if (surname == null || initial == null || number == null)
throw new IllegalArgumentException("Please fill all the required fields, [surname,initials,number]");
else {
Entry entry=new Entry(surname,initial,number);
entries.add(entry);
}
}
,则可以将List
实例包装在TreeSet
构造函数中:
ArrayList
答案 1 :(得分:1)
String one= entries.get(x).toString();
在此代码行中,您拥有reference
个对象中的Entry
个对象,除非您具有overridden
toString()
个方法。因此,根据我的猜测,您需要这样做:
String one = entries.get(x).getSurname();
由于需要比较姓氏,请获取该实体的姓氏,然后将其与新实体的姓氏进行比较。这样就可以了!
答案 2 :(得分:0)
您可以将条目添加到ArrayList
中的任何索引中,然后使用流对列表进行排序
public void addEntry(String surname, String initial, String number) {
if (surname == null || initial == null || number == null)
throw new IllegalArgumentException(
"Please fill all the required fields, [surname,initials,number]");
}
Entry entry=new Entry(surname,initial,number);
entries.add(entry);
entries = entries.stream()
.map(eachEntry -> eachEntry.getSurname())
.sorted((a, b) -> a.compareTo(b))
.collect(Collectors.toList());
}