从带有流java 8的列表中搜索包含寄存器内部分文本的寄存器[重复]

Posted

技术标签:

【中文标题】从带有流java 8的列表中搜索包含寄存器内部分文本的寄存器[重复]【英文标题】:Searching registers that contains a part of text inside a registers from a List with stream java 8 [duplicate] 【发布时间】:2020-06-30 11:59:41 【问题描述】:

我有这个 POJO。另外,我有一个学生列表,我想用流过滤哪些寄存器在他的学校名称中有文本santa。在 SQL 中会是这样的:LIKE %SANTA%

  public class Student 
    private String name;
    private String lastName;
    private String city;
    private String schoolname;
    private String telephone;

    public String getName() 
      return name;
    

    public void setName(String name) 
      this.name = name;
    

    public String getLastName() 
      return lastName;
    

    public void setLastName(String lastName) 
      this.lastName = lastName;
    

    public String getCity() 
      return city;
    

    public void setCity(String city) 
      this.city = city;
    

    public String getSchoolname() 
      return schoolname;
    

    public void setSchoolname(String schoolname) 
      this.schoolname = schoolname;
    

    public String getTelephone() 
      return telephone;
    

    public void setTelephone(String telephone) 
       this.telephone = telephone;
    

我想获取他的schoolname 包含字符串santa 的学生,你知道我怎样才能对流进行过滤吗?

我需要使用流,我不能使用 if 和 else 语句。

【问题讨论】:

你试过用流做点什么吗? 您可以将filter() 与正则表达式match() 一起使用。 这能回答你的问题吗? What is the best way to filter a Java Collection? 如果您需要有文字和视频的教程,这里是 - tutorials.jenkov.com/java-functional-programming/streams.html 【参考方案1】:

您可以使用stream()filter(),其中students 是学生对象的列表。

students.stream().filter(student->student.getSchoolname().contains("santa")).collect(Collectors.toList());

【讨论】:

【参考方案2】:

流过List 并应用filter() 检查Student 的学校名称是否包含“SANTA”。

List<School> input = ...
List<School> output = 
    input.stream()
         .filter(s -> s.getSchoolname().contains("SANTA"))
         .collect(Collectors.toList());

如果你想让这个过滤器不区分大小写,你可以写

.filter(s -> s.getSchoolname().toUpperCase().contains("SANTA"))

如果您想要包含“SANTA”的List 和不包含它的List,您可以使用Collectors.partitioningBy()

List<School> input = ...
Map<Boolean,List<School>> output = 
    input.stream()
         .collect(Collectors.partitioningBy(s -> s.getSchoolname().contains("SANTA")));

【讨论】:

非常感谢,我还需要知道如何获取不包含字符串“santa”的寄存器,请你帮我@Eran @fmd89 查看编辑 非常感谢@Eran 非常感谢!!!!

以上是关于从带有流java 8的列表中搜索包含寄存器内部分文本的寄存器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用流将列表转换为带有索引的地图 - Java 8?

通过流将带有列表的列表对象转换为Java 8中的映射[重复]

从内部列表java 8中的对象列表中获取id列表

使用java 8从内部对象中查找实体列表中所有ID的列表的方法

将对象列表转换为映射Java 8流

使用 Java 8 流在 LocalDate 属性的对象列表中查找最近的日期