我有一个这样的抽象类:
public abstract class Ingredient {
protected int id;
}
和一个清单
List <Ingredient> ingredientList = new ArrayList <Ingredient>()
我希望能够使用id ingredientList
获取成分。
我做了类似的事情:
public abstract class Ingredient implements Comparable<Ingredient>{
protected int id;
@Override
public int compareTo(Ingredient o) {
// TODO Auto-generated method stub
if (this.id > o.id){
return 1;
}
return 0;
}
}
但仍无法正常工作
答案 0 :(得分:2)
如果您需要执行常规查找,Map
可能是一个更好的集合,可以在这里使用:
Map<Integer, Ingredient> ingredientMap = new HashMap<>();
答案 1 :(得分:2)
for (Ingredient ingredient : IngredientList) {
if (ingredient.getId() == id) {
System.out.println("found");
}
}
System.out.println("not found");
答案 2 :(得分:1)
如果您使用Eclipse Collections,则可以使用检测方法。
final int idToFind = ...;
ListIterable<Ingredient> ingredientList = FastList.newListWith(...);
Ingredient ingredient = ingredientList.detect(new Predicate<Ingredient>()
{
public boolean accept(Ingredient eachIngredient)
{
return eachIngredient.getId() == idToFind;
}
});
如果您无法更改ingredientList的类型,您仍然可以使用detect的静态实用程序形式。
Ingredient ingredient = ListIterate.detect(ingredientList, new Predicate<Ingredient>()
{
public boolean accept(Ingredient eachIngredient)
{
return eachIngredient.getId() == idToFind;
}
});
当Java 8发布lambdas时,您将能够将代码缩短为:
Ingredient ingredient = ingredientList.detect(eachIngredient -> eachIngredient.getId() == idToFind);
注意:我是Eclipse集合的提交者。
答案 3 :(得分:0)
你可以(在你们班级内)
interface Callback { public void handle(Indredient found); }
public void search(List<Ingredient> ingredientList, int id, Callback callback) {
for(Ingredient i : ingredientList) if(i.id == id) callback.handle(i)
}
然后
ingredients.search ( 10, new Callback() {
public void handle(Ingredient found) {
System.out.println(found);
}
});
或类似的......
ps。:我在你改变了问题之前回答了问题;)
答案 4 :(得分:0)
只是一个猜测,但这可能是你的意思:
Best way to use contains in an ArrayList in Java?
list的contains()方法使用equals()和hashCode()
答案 5 :(得分:0)
当您使用List.contains()
查找包含ID的成分时,请覆盖equals()
和hashCode() { return id};
在equals()中:将this.id与other.id相等。
答案 6 :(得分:0)
public Ingredient getIngredientById(int id) {
for (Ingredient ingredient : ingredientList) {
if (ingredient.id == id) {
return ingredient;
}
}
}