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)
没有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)
使用正则表达式:
List<Animal> filtList = list.stream()
.filter(x -> x.getName().matches("(?i).*black.*"))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
正则表达式标志的"(?)"意思是“忽略大小写”。