2014-11-01 2 views
0

Так у меня есть 2 текстовые файлы, оба имеют списки IP: порт в немУдалите связанные поля в LinkedList

я загружаю списки в свои linkedlists

public static LinkedList<DataValue> result = new LinkedList<DataValue>(); 
    public static LinkedList<DataValue> badresult = new LinkedList<DataValue>(); 

они имеют значение класса

public static class DataValue { 
    protected final String first; 
    protected final int second; 

    public DataValue(String first, int second) { 
     this.first = first; 
     this.second = second; 
    } 
} 

пытается сделать так, он делает это ... нагрузки LIST1 в результате нагрузки list2 в badresult

тогда все badresult удаляются из результата

так загрузка осуществляется

public static void loadList() throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader("./proxy.txt")); 
     String line; 
     String args[]; 
     String first;int second; 
     while ((line = br.readLine()) != null) { 
      args = line.split(":"); 
      first = args[0]; 
      second = Integer.parseInt(args[1]); 
      result.add(new DataValue(first, second)); 
     } 
} 
public static void loadUsed() throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader("./usedproxy.txt")); 
     String line; 
     String args[]; 
     String first;int second; 
     while ((line = br.readLine()) != null) { 
      args = line.split(":"); 
      first = args[0]; 
      second = Integer.parseInt(args[1]); 
      badresult.add(new DataValue(first, second)); 
     } 
} 

и вот моя неудавшаяся попытка попытки удалить все те же результаты результата LinkedList

public static void runCleaner() { 
    for (DataValue badresultz : badresult) { 
     if (result.remove(badresultz)) { 
      System.out.println("removed!"); 
     } else { 
      System.out.println("not removed..."); 
     } 
    } 
} 
+0

реализуют 'equals' метод в' DataValue' –

ответ

1

В Java мы используем метод equals для проверки равенства объектов. Ваш класс DataValue не реализует это, поэтому, когда вы попросите удалить объект из списка, он фактически сравнивает объект с использованием == (как реализован классом Object).

System.out.println((new DataValue("hello", 1)).equals(new DataValue("hello", 1))); 
// prints false 

Это потому, что 2 объекта фактически представлены 2 различными пространствами в памяти. Чтобы решить эту проблему, вам необходимо переопределить метод equals в классе DataValue, также неплохо переопределить метод hashCode. Я использовал затмение генерировать 2 метода для меня:

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((first == null) ? 0 : first.hashCode()); 
    result = prime * result + second; 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    DataValue other = (DataValue) obj; 
    if (first == null) { 
     if (other.first != null) 
      return false; 
    } else if (!first.equals(other.first)) 
     return false; 
    if (second != other.second) 
     return false; 
    return true; 
} 
+0

, который работал спасибо :) – Travs

Смежные вопросы