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

Dal*_*ale 4 java java-8 java-stream

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

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

Brown Bear
Black Bear
Black Crow
Red Herring 
Owl
Sparrow
Blackbacked Flocking Crow
Run Code Online (Sandbox Code Playgroud)

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

public class Animal{
    public name;
    public animalType;
}
Run Code Online (Sandbox Code Playgroud)

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

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

dev*_*per 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
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 5

使用正则表达式:

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

正则表达式标志的"(?)"意思是“忽略大小写”。