我有一个items
类,其中包含mProductType
个字段。
在此类中,有以下方法:
public ArrayList<Item> getProductsByCategory(String category, ArrayList<Item> productList) {
ArrayList<Item> returnList = new ArrayList<>();
for (int i = 0; i < productList.size(); i++) {
if (productList.get(i).getmProductType() == category) {
returnList.add(productList.get(i));
}
}
return returnList;
}
到目前为止,一切都很好。在我的其他ProductsInCategoryFragment
类中,我尝试调用如下方法:
ArrayList<Item> products;
// ... filling variable "products" with content
products = fetcher.getItems();
// ... declaring the category String
String category = getArguments().getString("CATEGORY");
products.getProductsByCategory(category, products);
我可以从类项目的实例中调用该方法,但不能在该类的ArrayList上调用。最后一行代码给我这个错误:
Error:(82, 17) error: cannot find symbol method getProductsByCategory(String,ArrayList<Item>)
我知道这可能是一个非常基本的问题,但我似乎无法理解。这是可见性问题吗?
答案 0 :(得分:1)
应该为Document
,您尝试在items.getProductsByCategory(category, products);
对象上调用getProducts...
方法。
答案 1 :(得分:1)
使用此签名和实现,它可能更像是static
函数,因为它不使用当前(this
)对象中的任何成员。 ArrayList<Item> products
是ArrayList
,而不是您的Item
类型,这就是为什么它没有您的方法的原因。另外,将String
与==
进行比较通常是行不通的,请改用equals()
。
所以:
public static ArrayList<Item> getProductsByCategory(String category, ArrayList<Item> productList) {
ArrayList<Item> returnList = new ArrayList<>();
for (int i = 0; i < productList.size(); i++) {
if (category.equals(productList.get(i).getmProductType())) {
returnList.add(productList.get(i));
}
}
return returnList;
}
用作:
ArrayList<Item> filteredItems = Item.getProductsByCategory(category, products);
(假设getProductsByCategory()
是Item
中的一种方法,但是可能有更好的地方,也许在您的main()
附近,或者您打算使用它的任何地方)< / p>
答案 2 :(得分:0)
您可以创建扩展ItemList<Item>
的自定义ArrayList<Item>
类。在此类中,您可以添加getProductsByCategory
方法。然后将您的产品变量更改为ItemList<Item> products;
class ItemList<Item> extends ArrayList<Item> {
public ArrayList<Item> getProductsByCategory(String category) {
ArrayList<Item> returnList = new ArrayList<>();
for (int i = 0; i < this; i++) {
if (this.get(i).getmProductType().equals(category)) {
returnList.add(this.get(i));
}
}
return returnList;
}
}
或者在Java 8中,您可以简单地使用流来根据类别过滤列表,而不必实现自己的getProductsByCategory函数。
List<Item> result = products.stream()
.filter(p -> (p.getmProductType().equals(category)))
.collect(Collectors.toList());