Tengo 2 listas, el que contiene una lista de números y la lista de nombres de otro un. He prefijo de los nombres con un número de la primera lista, seguido de un guión. Quiero filtrar la segunda lista en base a todos los números que se encuentran en la primera lista.
Lo que he tratado.
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());
El código anterior se ejecuta sin error, pero el FilteredList está vacía. Es evidente que estoy haciendo algo mal.
El FilteredList sólo debe contener:
1_John
9_Susan
Usted llama startsWith
en el mal String
s (por ejemplo, se prueba si "1_".startsWith("1_John")
en lugar de "1_John".startsWith("1_")
).
Usted debe transmitir más nameList
y utilizar numberList
para el filtrado:
List<String> filteredList =
nameList.stream()
.filter(str -> numberList.stream().anyMatch(str::startsWith))
.collect(Collectors.toList());
PS Stream.of(numberList.toArray(new String[0]))
es redundante. Utilice numberList.stream()
en su lugar.