我需要根据Object内部的属性将Object添加到有序的ArrayList中。我知道如何使用.add方法添加对象,但我不知道如何使用compareTo()方法为它搜索正确的位置。如果Object包含某个String,我还需要从ArrayList中删除一个Object,但我无法弄清楚如何从ArrayList访问Object属性。
房地产经纪人对象
/**
* Constructor for Realtor object using parameter
* @param readData - array of data from line
*/
public Realtor(String[]readData){
licenseNumber = readData[2];
firstName = readData[3];
lastName = readData[4];
phoneNumber = readData[5];
commission = Double.parseDouble(readData[6]);
}
RealtorLogImpl
public class RealtorLogImpl {
private ArrayList<Realtor> realtorList;
/**
* Add Realtor object to ordered list
* @param obj - Realtor object
*/
public void add(Realtor obj){
//needs to be added into correct place depending on Realtor licenseNumber
realtorList.add(obj);
}
/**
* Delete Realtor object from list if license matches
* and return true if successful
* @param license
* @return
*/
public boolean remove (String license){
//need to remove Realtor with specific licenseNumber and return true if successful
}
答案 0 :(得分:1)
我假设你正在使用java 8.其中一些东西还没有在java 7中实现,所以记住这一点。
首先,要删除我建议使用arraylist上的removeif()
method的项目。这需要一个lambda表达式,可能类似于x -> x.getString().equals("someString")
。
其次,您可以将对象添加到数组中,然后只需sort数组。您只需编写一个比较器来对其进行排序。
答案 1 :(得分:1)
这是一些基本代码;我这里没有编译器,所以你可能会发现小错误/错别字。
我确信您可以使用更好的课程,而不是管理自己的有序列表。
要插入:
public bool add(Realtor obj) {
int idx = 0;
for (Realtor s : realtorList) {
if (s.licenseNumber.equals(item.licenseNumber)) {
return false; // Already there
}
if (s.licenseNumber.compareTo(item.licenseNumber) > 0) {
orderedList.add(idx, item);
return true; // Inserted
}
idx++;
}
orderedList.add(item);
return true; // Appended
}
要删除:
public bool deleteItem(String license) {
int idx = 0;
for (Realtor s : realtorList) {
if (s.licenseNumber.equals(license)) {
realtorList.remove(idx);
return true; // Removed
}
}
return false; // Not found
}
答案 2 :(得分:1)
要回答您的问题,请查看以下代码段(需要Java 8)并根据您的需求进行调整:
public static void main(String[] args) {
final List<String> list = new ArrayList<>();
list.add("Element 1");
list.add("Element 2");
list.add("Element 3");
/*
* Insert at a specific position (add "Element 2.5" between "Element 2" and "Element 3")
*/
Optional<String> elementToInsertAfter = list.stream().filter(element -> element.equals("Element 2")).findFirst();
if(elementToInsertAfter.isPresent()) {
list.set(list.indexOf(elementToInsertAfter.get()) + 1, "Element 2.5");
}
/*
* Remove a particular element (in this case where name equals "Element 2")
*/
list.removeIf(element -> element.equals("Element 2"));
}
#add(element)
只是在列表中添加一个元素。如果是ArrayList,它会在最后添加。如果要在特定位置插入元素,则需要使用#set(index,element)
但是,不要手动将元素插入特定位置,而应使用比较器。见java.util.List.sort(Comparator<? super E> e)