小编Scy*_*101的帖子

Java 8单独的列表元素类别

给定我有一个列表,所有列表都继承自同一基类:

class Item {
    protected String name;

    public Item(String name) {

        this.name = name;
  }

  getName() {

      return name;
  }
}

class ItemA extends Item {...}
class ItemB extends Item {...}

List<Item> itemList = Arrays.asList(new ItemA("itemA"), new ItemB("itemB"));
Run Code Online (Sandbox Code Playgroud)

就我而言,我无法控制这些类的实现方式,但是我需要将列表分为两个包含相应元素名称的不同列表。

这是包含大量ifand instanceof语句的解决方案的首次尝试:

List<String> itemAList = new ArrayList<>();
List<String> itemBList = new ArrayList<>();

itemList.forEach(item -> {

    if(item instanceof ItemA) {

        itemAList.add(item.getName());
    }        
    else if(item instanceof ItemB) {

        itemBList.add(item.getName());
    }
});
Run Code Online (Sandbox Code Playgroud)

因此这可行,但是我对如何避免使用该if语句进行了思考。由于我使用的是Java 8,因此可以执行以下操作:

List<String> itemAList = itemList.stream()
    .filter(ItemA.class::isInstance) …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

4
推荐指数
1
解决办法
113
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1

lambda ×1