Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich häte folgendes Problem. Ich habe eine menge der Objekte in einer ArrayList gespeichert. Ich habe vor eine Methode zu schreiben, die diese Objekte anhand gewisser Kriterien filtert und als neues ArrayList zurückliefert.
public ArrayList filter(String property, String eqSign, String value)
property: Feldname
eqSign: == > < !=
value: der Wert des Feldes
Wie könnte ich diese Aufgabe eingehen? Gibt es bereit Klassen oder Methoden die oben genanntes ermöglichen?
Die Objekte in der ArrayList können andere Objekte enthalten und diese sollen auch mitvalidiert.
Mach in der Methode ne neue ArrayList und geh mit ner foreach-Schleife über die Original-Liste drüber und guck bei jedem Element ob es deinem Kriterien entspricht. Wenn ja, wird dieses Element der neuen ArrayList hinzugefügt. Nach der Schleife returnts du die neue ArrayList.
Die Objekte in der ArrayList können andere Objekte enthalten und diese sollen auch mitvalidiert.
ja die Methode habe ich bereit so wie du es beschrieben hast. Wie erstelle ich aber die Zeile mit der Validierung? Gibt es in java ein eval(String) Konstrukt?
zB.
for each element of ArrayList... if (eval(property+eqSign+value)
add element in new array
Leider habe ich nicht eine Zielführende Methode bis jetzt gefunden.
ich bin leider noch immer nich weitergekommen. Ich habe jetzt ein kleines Beispiel zusammengestellt:
Es gibt 3 Klassen - test(main), Country und Currency vobei die Country die currency in sich als Attribut speichert. Wenn man das Programm ausführt bekommt man folgende Ausgabe:
USA USD 100
DE EUR 20
JAP JPY 2000
So weit so gut.
Meine Frage bzw. Problem: Ich suche nach einer Möglilchkeit nach den Attributen der Klasse Country zu suchen und zwar auch in den anderen in Contry Klasse enthaltenen Klassen (also Currency).
Es soll eine Methode (zb in einer neune Finder Klasse) FilterByField(String FieldName, String eqSign, String Value).
Aufruf1: FilterByField("Country.name", "==", "USA")
Aufruf2: FilterByField("Currency.name", "==", "JPY")
Aufruf3: FilterByField("Country.amount", "<", "1000")
Glaubt ihr das es machbar wäre? Kann mir da jemand weiter helfen?
:bahnhof:
danke
Java:
package test;
public class Country {
private String name;
private Currency curr;
private Integer amount;
public Country(String name, String curr, int amount) {
// TODO Auto-generated constructor stub
this.setName(name);
this.setCurr(new Currency(curr));
this.setAmount(amount);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setCurr(Currency curr) {
this.curr = curr;
}
public Currency getCurr() {
return curr;
}
public void setAmount(Integer amount) {
this.amount = amount;
}
public Integer getAmount() {
return amount;
}
}
Java:
package test;
public class Currency {
private String name;
public Currency(String curr) {
// TODO Auto-generated constructor stub
this.setName(curr);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Java:
package test;
import java.util.ArrayList;
public class start {
/**
* @param args
* @throws FileNotFoundException
* @throws NoSuchFieldException
* @throws SecurityException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Country> countries = new ArrayList<Country>();
countries.add(new Country("USA", "USD", 100));
countries.add(new Country("DE", "EUR", 20));
countries.add(new Country("JAP", "JPY", 2000));
for (Country c : countries) {
//System.out.println(assetList.get(i));
System.out.println(c.getName()+"\t "+c.getCurr().getName()+"\t "+c.getAmount());
}
}
}