Dale
Dale

Reputation: 1628

In Java 8, can I use streams to filter a partial string?

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

Answers (2)

Bohemian
Bohemian

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

Vasu
Vasu

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

Related Questions