使用compareTo方法按字母顺序排列ArrayList中的新条目

时间:2019-03-16 16:08:28

标签: java string-comparison compareto

我想按字母顺序将条目排序到称为条目的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);
        }
    }
}

3 个答案:

答案 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());
}