Alerto Asked:2022-07-16 21:36:31 +0800 CST2022-07-16 21:36:31 +0800 CST 2022-07-16 21:36:31 +0800 CST 你如何在java中按价格过滤产品 772 如何按价格筛选产品。例如,有几种产品:胡萝卜 - 100r、苹果 - 123r、香蕉 - 122r、三角形 - 101r。您如何按价格过滤这些产品,例如:先便宜,反之亦然。 在我看来,它看起来像这样:有 2 个数组(您可以在其中写入字符串 id)。在一个数组中,产品的名称,在另一个数组中,它的价格。该产品的产品和价格都具有相同的id(例如:该产品的名称),然后在控制台中显示过滤后的产品列表(只需按顺序输出,无需更改数组) java массивы 2 个回答 Voted Best Answer Дмитрий 2022-07-17T01:59:28+08:002022-07-17T01:59:28+08:00 数组、散列集合、简单的实现……我看了一遍,对我来说似乎一点也不简单。我们需要产品 - 我们创建一个描述它们的类,如下所示: class Product { private final String name; private final Long cost; public Product(String name, Long cost) { this.name = name; this.cost = cost; } public String getName() { return name; } public Long getCost() { return cost; } @Override public String toString() { return "Product{" + "name=" + name + ", cost=" + cost + '}'; } } 现在我们需要一系列这些产品,但最好是集合,以免打扰尺寸。仍然是将产品推入集合,然后使用 sort 方法,将比较器传递给它,准确描述我们想要如何对这些东西进行排序。就这样。 class Main{ public static void main(String[] args) { List <Product> products = new ArrayList<>(); products.add(new Product("морковь", 10000L)); products.add(new Product("яблоко", 12300L)); products.add(new Product("банан", 12200L)); products.add(new Product("треугольник", 10100L)); products.sort(Comparator.comparingLong(Product::getCost)); System.out.println(products); products.sort(Comparator.comparingLong(Product::getCost).reversed()); System.out.println(products); } } 如果你突然有了,例如,一些其他服务也有价格,但是有一个完全不同的类来描述它们,那么你可以很容易地创建一个带有一些病名的接口,本着 Costable 的精神和唯一的方法 Long getCost() 将由产品类和服务类(以及任何其他有成本的类)实现。之后,我们的集合/方法可以不使用产品类进行类型化,而是使用带有病名的接口,并将实现它的所有内容(产品、服务等)推入其中。我们还使用多态性)) 不要重新发明轮子,不要懒惰使用提示。还有一件事......钱总是只以戈比/美分等计算,并且存储在一个整数(!)变量中,没有别的! SelectionForCollection 2022-07-16T23:37:22+08:002022-07-16T23:37:22+08:00 当然还有更优雅的方法(正如建议的比较器,但由于您没有遇到它们,这里有一个更简单的实现)。您可以使用对象数组。例如,让我们声明并实现 Product 类 import java.util.ArrayList; public class Product { String name; int price; public Product(String name, int price) { this.name = name; this.price = price; } //По таккому же принципу реализуйте нужные вам сортировки public static ArrayList<Product> cheaperFirst(ArrayList<Product> products) { //Луюая угодная вам сортировка, писал быстро - поэтому то что помню) Product buffer; for (int j = 0; j < products.size() - 1; j++) { for (int i = 0; i < products.size() - 1; i++) { if (products.get(i).getPrice() > products.get(i + 1).getPrice()) { buffer = products.get(i); products.set(i, products.get(i + 1)); products.set(i + 1, buffer); i--; } } } return products; } public int getPrice() { return price; } public String getName() { return name; } public void setPrice(int price) { this.price = price; } public void setName(String name) { this.name = name; } } 好吧,让我们的动作发生在 Main 类中。 import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Product> products = new ArrayList<>(); for (int i = 0; i < 10; i++) { products.add(new Product("Товар " + i, 1 - i)); } for (Product el: products) { System.out.println(el.name + ", " + el.price); } System.out.println("\n"); ArrayList<Product> products1 = Product.cheaperFirst(products); for (Product el: products1) { System.out.println(el.name + ", " + el.price); } } } 我确信我们不需要 2 个阵列。我们比较价格并更改对象(产品名称附加到对象上,因此它将与价格一起沿着列表移动)。
数组、散列集合、简单的实现……我看了一遍,对我来说似乎一点也不简单。我们需要产品 - 我们创建一个描述它们的类,如下所示:
现在我们需要一系列这些产品,但最好是集合,以免打扰尺寸。仍然是将产品推入集合,然后使用 sort 方法,将比较器传递给它,准确描述我们想要如何对这些东西进行排序。就这样。
如果你突然有了,例如,一些其他服务也有价格,但是有一个完全不同的类来描述它们,那么你可以很容易地创建一个带有一些病名的接口,本着 Costable 的精神和唯一的方法 Long getCost() 将由产品类和服务类(以及任何其他有成本的类)实现。之后,我们的集合/方法可以不使用产品类进行类型化,而是使用带有病名的接口,并将实现它的所有内容(产品、服务等)推入其中。我们还使用多态性))
不要重新发明轮子,不要懒惰使用提示。还有一件事......钱总是只以戈比/美分等计算,并且存储在一个整数(!)变量中,没有别的!
当然还有更优雅的方法(正如建议的比较器,但由于您没有遇到它们,这里有一个更简单的实现)。您可以使用对象数组。例如,让我们声明并实现 Product 类
好吧,让我们的动作发生在 Main 类中。
我确信我们不需要 2 个阵列。我们比较价格并更改对象(产品名称附加到对象上,因此它将与价格一起沿着列表移动)。