Java 如何通过以下方式从ArrayList获取具有相同对象属性的对象列表

Java 如何通过以下方式从ArrayList获取具有相同对象属性的对象列表,java,arraylist,collections,Java,Arraylist,Collections,如何使用object属性检索ArrayList中所有对象的列表 型号类别: public class Item { private String id; private String name; } ArrayList items=new ArrayList() 现在,我们如何搜索具有特定名称的ArrayList 例如:获取所有名为“Sam”的对象。您可以执行以下操作: List<Item> itemsNamedSam = items.stream() .filte

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

型号类别:

public class Item {
  private String id;
  private String name;
}
ArrayList items=new ArrayList()

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

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

您可以执行以下操作:

List<Item> itemsNamedSam = items.stream()
    .filter(item -> item.name.equals("Sam"))
    .collect(Collectors.toList())
List itemsnamesam=items.stream()
.filter(item->item.name.equals(“Sam”))
.collect(收集器.toList())
几点注意:

  • 您可能应该将
    项中的字段设置为私有。例如,就目前情况而言,您可能会意外更改
    名称
    字段
  • 在大多数情况下,我们应该使用
    List
    (接口),而不是
    ArrayList
    (实现)
您可以执行以下操作:

List<Item> itemsNamedSam = items.stream()
    .filter(item -> item.name.equals("Sam"))
    .collect(Collectors.toList())
List itemsnamesam=items.stream()
.filter(item->item.name.equals(“Sam”))
.collect(收集器.toList())
几点注意:

  • 您可能应该将
    项中的字段设置为私有。例如,就目前情况而言,您可能会意外更改
    名称
    字段
  • 在大多数情况下,我们应该使用
    List
    (接口),而不是
    ArrayList
    (实现)

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

 public static List<Item> findItemsByName(Collection<Item> listItems, String name) {
        
     return listItems.stream().filter(item -> name.equals(item.getName()))
    .collect(Collectors.toList());
 }
公共静态列表findItemsByName(集合列表项,字符串名称){
返回listItems.stream().filter(item->name.equals(item.getName()))
.collect(Collectors.toList());
}

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

 public static List<Item> findItemsByName(Collection<Item> listItems, String name) {
        
     return listItems.stream().filter(item -> name.equals(item.getName()))
    .collect(Collectors.toList());
 }
公共静态列表findItemsByName(集合列表项,字符串名称){
返回listItems.stream().filter(item->name.equals(item.getName()))
.collect(Collectors.toList());
}

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

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

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

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

items.stream()。谢谢你,Alex。你想用这个来写答案吗?
items.stream().filter(item->“Sam.equals(item.name)).collect(Collectors.toList())
@Alex是的,成功了。谢谢,亚历克斯。你想用这个写答案吗?是的。好的,我会把它们换成私人的。有什么理由使用列表而不是ArrayList吗?谢谢你的帮助。@Lenzman这是软件工程中的一个原则——对变化的弹性。示例1:如果在Java 18中,
列表
将有一个超级高效的实现,那么您将不得不在许多地方替换
数组列表
,而不仅仅是在初始化列表的地方。如果您使用了一些未出现在
列表中的方法,则情况会更糟。示例2:需求可能会发生变化,您可能不需要使用
get(5)
,而只需要按顺序遍历列表并添加项。在这种情况下,
LinkedList
可能更合适。明白了。谢谢你最需要的兔子。好的,我会把它们换成私人的。有什么理由使用列表而不是ArrayList吗?谢谢你的帮助。@Lenzman这是软件工程中的一个原则——对变化的弹性。示例1:如果在Java 18中,
列表
将有一个超级高效的实现,那么您将不得不在许多地方替换
数组列表
,而不仅仅是在初始化列表的地方。如果您使用了一些未出现在
列表中的方法,则情况会更糟。示例2:需求可能会发生变化,您可能不需要使用
get(5)
,而只需要按顺序遍历列表并添加项。在这种情况下,
LinkedList
可能更合适。明白了。谢谢最需要的兔子谢谢你的信息谢谢你的信息