Reputation: 1628
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());
Upvotes: 8
Views: 21258
Reputation: 425003
Use regex:
List<Animal> filtList = list.stream()
.filter(x -> x.getName().matches("(?i).*black.*"))
.collect(Collectors.toList());
The regex flag "(?)"
means "ignore case".
Upvotes: 5
Reputation: 22422
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
Upvotes: 11