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

时间:2017-04-13 17:55:17

标签: java java-8 java-stream

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

让我们假设我有一个动物清单,如:

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

让我们假设所有动物名称都在动物对象列表中

public class Animal{
    public name;
    public animalType;
}

有没有办法找到所有黑色的动物,无论名称中的某个地方是什么情况。像下面这样......

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

2 个答案:

答案 0 :(得分:6)

toUpper()没有String方法。

它是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

答案 1 :(得分:2)

使用正则表达式:

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

正则表达式标志"(?)"表示&#34;忽略大小写&#34;。