【问题标题】:How to get a list of objects with same objects property from an ArrayList by如何从 ArrayList 中获取具有相同对象属性的对象列表
【发布时间】:2021-08-11 08:23:22
【问题描述】:

如何使用对象属性检索 ArrayList 中所有对象的列表。

模型类:

public class Item {
  private String id;
  private String name;
}

ArrayList<Item> items = new ArrayList();

现在,我们如何搜索具有特定名称的 ArrayList?

例如:获取所有名为“Sam”的对象。

【问题讨论】:

  • items.stream().filter(item -> "Sam".equals(item.name)).collect(Collectors.toList())
  • @Alex 是的,这行得通。谢谢,亚历克斯。
  • 你想用这个写一个答案吗?

标签: java arraylist collections


【解决方案1】:

你可以这样做:

List<Item> itemsNamedSam = items.stream()
    .filter(item -> item.name.equals("Sam"))
    .collect(Collectors.toList())

几点说明:

  • 您可能应该在Item-private 中创建字段。例如,就目前情况而言,您可能会意外更改 name 字段。
  • 在大多数情况下,我们应该使用List&lt;Item&gt;(接口),而不是ArrayList&lt;Item&gt;(实现)。

【讨论】:

  • 是的。好的,我会将它们更改为私人的。是否有任何理由使用 List 而不是 ArrayList 并感谢您的帮助。
  • @Lenzman 这是软件工程中的一条原则——适应变化。示例 1:如果在 Java 18 中对 List 有超级高效的实现,您将不得不在许多地方替换 ArrayList,而不仅仅是在您初始化列表的地方。如果你使用了List中没有出现的一些方法,那就更糟了..
  • 示例2:需求可能会发生变化,您可能不需要使用get(5),而只需按顺序遍历列表并添加项目。在这种情况下,LinkedList 可能更合适。
  • 好的,知道了。谢谢最需要的兔子
【解决方案2】:

您可以使用 removeIf 方法从列表中删除所有没有“Sam”名称的元素:

itemsNamedSam.removeIf(item -> !item.name.equals("Sam"));

【讨论】:

  • 感谢您的信息
【解决方案3】:

在@Alex 的评论的帮助下,我最终做的是:

 public static List<Item> findItemsByName(Collection<Item> listItems, String name) {
        
     return listItems.stream().filter(item -> name.equals(item.getName()))
    .collect(Collectors.toList());
 }

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 2020-03-02
    • 2018-04-13
    • 2020-07-06
    • 2011-04-09
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多