识别数组列表中的对象

因此,我正在用Java创建一个eshop,但是我面临一个我无法解决的问题。该eshop出售4种商品,因此我们拥有Item类以及Pen,Pencil,Notebook和Paper子类,我将它们全部存储在arraylist中。我想创建一个方法,该方法根据产品的类型将产品分类打印。例如: 笔-> pen1,pen2 铅笔-> Pencil1,pencil2

我遇到的问题是,我不知道如何在arraylist中识别出例如pen1是一个笔对象,并将其打印在笔类别中。我尝试使用迭代器,但是我对它不是很熟悉,因此无法做很多事情。

评论
  • 一纸离人醉
    一纸离人醉 回复

    强制性Java Streams解决方案:

    Map<Class<? extends Item>, List<Item> map = yourList.stream()
        .collect(Collectors.groupingBy(Object::getClass));
    

    这将按类别对列表进行分组,从而生成一个映射,其中每个类别为键,而该类别的对象列表为值

    getClass()

    检索实例的类。

    Pencil myItem = new Pencil();
    myItem.getClass(); // Returns Class[com.example.yourpackage.Pencil]
    

    instanceof

    myItem instanceof Item checks if the variable myItem is an instance of the Item class, that means either an Item, or one of its subclasses, for example Pencil. The comparison, of course, returns a boolean.