当前位置: 首页 > 知识库问答 >
问题:

排序数组列表中的对象(按数据类型双精度)[重复]

柴宏浚
2023-03-14

我是一名Java初学者,我正在基于Stackowerflow上的一个示例构建一个简单的购物清单程序:

使用用户输入将对象添加到ArrayList的方法

用户输入(名称价格)将商品添加到购物清单中。

现在我希望输出显示通过使用即可比按价格(上升)排序的对象,但不知道如何将其添加到代码中。我真的是个初学者,所以我希望我写的东西有意义。

非常感谢。

代码如下:

    import java.util.List;
    import java.util.ArrayList;

    public class Store {
        private static final Store INSTANCE = new Store();
        private List<Item> listOfItems = new ArrayList<>();

        private Store() {
    
        }

        public static Store getInstance() {
            return INSTANCE;
        }

        public void addItems(List<Item> newlistOfItems) {
            listOfItems.addAll(newlistOfItems);
        }

        public String printListOfItems() {
            StringBuilder sb = new StringBuilder();
            for (Item item : listOfItems) {
                sb.append(" [NAME : " + item.getName() + ", PRICE : " + item.getPrice() + "]");
            }
            return sb.toString();
        }
    }
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.util.List;

    public class ItemManagerServiceImpl implements ItemManagerService {
        @Override
        public List<Item> createListOfItems() {
            List<Item> newListOfItems = new ArrayList<>();
            Scanner scanner = new Scanner(System.in);

            try {
                do {
                    System.out.println("ENTER NAME");
                    String name = scanner.nextLine();

                    System.out.println("ENTER PRICE");
                    while (!scanner.hasNextDouble()) {
                        System.out.print("You must enter a valid number! Try again: ");
                        scanner.next();
                    }

                    double price = scanner.nextDouble();
                    Item item = new Item(name, price);
                    newListOfItems.add(item);

                    System.out.println("Continue?[Y/N]");
                    scanner.nextLine();
                } while (scanner.nextLine().equalsIgnoreCase("y"));
            } finally {
                scanner.close();
            }
            return newListOfItems;
        }
    }
    import java.util.List;

    public interface ItemManagerService {
        List<Item> createListOfItems();
    }
    public class Item {
        private String name;
        private double price;

        public Item(String name, double price) {
            this.name = name;
            this.price = price;
        }

        public String getName() {
            return name;
        }

        public double getPrice() {
            return price;
        }
    }
    import java.util.List;

    public class MainApp {

        public static void main(String[] args) {
            ItemManagerService itemManagerService = new ItemManagerServiceImpl();
            List<Item> newlistOfItems = itemManagerService.createListOfItems();

            Store.getInstance().addItems(newlistOfItems);
            System.out.println(Store.getInstance().printListOfItems());
        }
    }


    

共有1个答案

柳星晖
2023-03-14

我建议使用java。util。比较器。comparingDouble构建一个比较器,可以传递给java。util。列表排序。这可能看起来像

listOfItems.sort(Comparator.comparingDouble(Item::getPrice));
 类似资料:
  • 问题内容: 我正在尝试通过其score属性的值(是double值)对自定义类染色体进行排序。这些染色体存储在ArrayList中。我知道我必须使用比较器,但是在过去的一个小时里我已经在线阅读了很多不同的观点,这使我感到非常困惑。 附上我的代码,如果有人可以指出正确的方向,我将不胜感激。 不知道这有什么区别,但是分数只能是0.0到1.0之间(包括0.0到1.0)的两倍 问题答案: 要使用: 如果您打

  • 我有长ID的数组列表 我有一个具有

  • 但我得到一条错误消息,说无法在原语类型int上调用compareToIgnoreCase(int) 我如何修复这段代码,使它能够用整数值对列表进行排序?

  • 所以我基本上有表格视图,那里有一些列。其中一列(价格)由字符串组成,实际上表示双精度。唯一的原因是,因为我希望双倍,例如,因为 1 将显示为 1.00。但是正因为如此,我不能正确使用默认排序(排序双精度)。我可以以某种方式更改它,所以当我按下该按钮时,它会将它们排序为双倍类型? 如果需要,请在此处编码:

  • 我有一个对象类产品,如下所示 我想根据价格对产品进行分类。我的数组是 我做了 但问题是部分在error.It不能使用方法。我希望我的arrayList按照product.The价格的整数排序value.But当我将其更改为字符串类型时,我得到了,但它仍然未排序,因为字符串type.Please帮助我

  • 举个例子 那么,如何按日期对该数组进行排序? 这只是一个小例子,但它就像数组中的1000个对象。我在互联网上搜索并找到了一些使用函数的示例,但它在我的大数组中不起作用。