In Java 8, can I use streams to filter a partial string?
Let us assume I have a list of animals like:
Brown Bear
Black Bear
Black Crow
Red Herring
Owl
Sparrow
Blackbacked Flocking Crow
Let us assume all of the Animals names are in a list of Animals Objects
public class Animal{
public name;
public animalType;
}
Is there some way to find all of the animals that have Black regardless of the case somewhere in the name. Something like the following...
List<Animal> filtList = employeeList.stream()
.filter(x -> "%Black%".toUpperCase().equals(x.getLastName().toUpper()))
.collect(Collectors.toList());
There is no toUpper() method for String.
It is toUpperCase() and also you need to use contains() to check "BLACK" there anywhere in the whole string, so the code should be simple as shown below:
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
Use regex:
List<Animal> filtList = list.stream()
.filter(x -> x.getName().matches("(?i).*black.*"))
.collect(Collectors.toList());
The regex flag "(?)" means "ignore case".