2017-04-13 1 views
3

Java 8에서 스트림을 사용하여 부분 문자열을 필터링 할 수 있습니까? Java 8에서 스트림을 사용하여 부분 문자열을 필터링 할 수 있습니까?

public class Animal{ 
    public name; 
    public animalType; 
} 

찾을 수있는 방법이 있나요 개체

Brown Bear 
Black Bear 
Black Crow 
Red Herring 
Owl 
Sparrow 
Blackbacked Flocking Crow 

우리가 동물의 목록에있는 동물 이름을 모두 가정 해 봅시다 :

우리가 내가 좋아하는 동물의 목록을 가지고 가정하자 이름에 어딘가의 경우에 관계없이 블랙을 가진 모든 동물. 다음과 같은 뭔가 ...

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

답변

6

String에 대한 toUpper() 방법이 없습니다.

toUpperCase()하고 다음과 같이 또한 코드가 간단해야하므로, 전체 문자열의 아무 곳이나있다 "BLACK"를 확인하는 contains()를 사용해야합니다 :

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 
+0

toUpper를 toUpperCase로 수정했습니다. – Dale

2

사용 정규식 :

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

정규식 플래그 "(?)"은 "대소 문자 무시"를 의미합니다.