【问题标题】:In Java 8, can I use streams to filter a partial string?在 Java 8 中,我可以使用流过滤部分字符串吗?
【发布时间】:2017-04-13 17:55:16
【问题描述】:

在 Java 8 中,我可以使用流过滤部分字符串吗?

假设我有一个动物列表,例如:

Brown Bear
Black Bear
Black Crow
Red Herring 
Owl
Sparrow
Blackbacked Flocking Crow

让我们假设所有的 Animals 名称都在 Animals Objects 列表中

public class Animal{
    public name;
    public animalType;
}

有什么方法可以找到所有带有黑色的动物,而不管名称中的大小写。类似于以下内容...

List<Animal> filtList = employeeList.stream()
    .filter(x -> "%Black%".toUpperCase().equals(x.getLastName().toUpper()))
    .collect(Collectors.toList());

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    String 没有 toUpper() 方法。

    它是toUpperCase(),而且你需要使用contains()来检查整个字符串中的“BLACK”,所以代码应该很简单,如下所示:

    List<Employee> filtList = inputList.stream().
             filter(value -> value.toUpperCase().//convert to uppercase for checking
             contains("BLACK")).//filter values containing black
             collect(Collectors.toList());//collect as list
    

    【讨论】:

    • 我建议使用 Stream.map 进行大写转换
    【解决方案2】:

    使用正则表达式:

    List<Animal> filtList = list.stream()
       .filter(x -> x.getName().matches("(?i).*black.*"))
       .collect(Collectors.toList());
    

    正则表达式标志"(?)" 表示“忽略大小写”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2019-11-24
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多