Como filtrar uma lista usando Java 8 córrego e variedade startwith de valores

Quentinb:

Eu tenho 2 listas, aquele contém uma lista de números e a lista de outro, um dos nomes. Tenho prefixado os nomes com um número da primeira lista, seguido por um sublinhado. Eu quero filtrar a segunda lista com base em todos os números encontrados na primeira lista.

O que eu tentei.

List<String> numberList = new ArrayList<>();
numberList.add("1_");
numberList.add("9_");

List<String> nameList = new ArrayList<>();
nameList.add("1_John");
nameList.add("2_Peter");
nameList.add("9_Susan");

List<String> filteredList = Stream.of(numberList.toArray(new String[0]))
                .filter(str -> nameList.stream().anyMatch(str::startsWith))
                .collect(Collectors.toList());

O código acima é executado sem erro, mas o FilteredList está vazio. É evidente que eu estou fazendo algo errado.

O FilteredList deve conter apenas:

1_John

9_Susan

Eles foram:

Você chama startsWithna errado Strings (por exemplo, você testar se "1_".startsWith("1_John")em vez de "1_John".startsWith("1_")).

Você deve transmitir mais nameListe utilizar numberListpara a filtragem:

List<String> filteredList = 
    nameList.stream()
            .filter(str -> numberList.stream().anyMatch(str::startsWith))
            .collect(Collectors.toList());

PS Stream.of(numberList.toArray(new String[0]))é redundante. Use numberList.stream()em seu lugar.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=178157&siteId=1
Recomendado
Clasificación