Refactor de dos para java en 8 corrientes

UCI:

Estoy frente a un pequeño problema para volver a escribir mis dos para la de en java 8 corrientes.

// This is a method parameter
Map<String, Collection<String>> preSelectedValues;

List<PersonModel> parameters = parameterSearchService.getParameterNames();

for(Iterator<Map.Entry<String, Collection<String>>> it = preSelectedValues.entrySet().iterator(); it.hasNext();) {
     Map.Entry<String, Collection<String>> entry = it.next();
     for(int i = 0; i < parameters.size(); i++) {
          if (entry.getKey().startsWith(parameters.get(i).getName())) {
               it.remove();
          }
     }
}

He intentado siguiente transmisiones para que tengan el mismo comportamiento que antes:

Map<String, Collection<String>> filteredParameters = preSelectedValues.keySet().stream()
    .filter(x -> isParameterValid(x, parameters))
    .collect(Collectors.toMap(k -> k, v -> preSelectedValues.get(v)));

isParameterValid método:

private boolean isParameterValid(String parameterId, List<PersonModel> preSelectedValues) {
     return preSelectedValues.stream()
            .anyMatch(v -> !v.getName().startsWith(parameterId));
}

Básicamente lo que estoy tratando de hacer es el filtro del mapa "preSelectedValues", que comienza con "parameterId". Pero de alguna manera cuando estoy usando corrientes o bien se filtra a todo o nada.

Eran :

Su isParameterValidmétodo no tiene la misma lógica que los lazos originales, ya que:

  1. Cambió la instancia y el argumento en la llamada a startsWith.
  2. Llamando anyMatchcon una !v.getName().startsWith(parameterId)única le indica si al menos un elemento de la List<PersonModel>no comienza con parameterId. Su condición original para mantener la entrada en la Mapera que todos los elementos de List<PersonModel>no empiezan con parameterId(o en realidad, al revés - parameterIdno se inicia con cualquiera de los nombres de los elementos de List<PersonModel>).

Por lo tanto negaba el método para devolver la condición para la eliminación de una entrada de la Map:

private boolean isParameterInvalid(String parameterId, List<PersonModel> preSelectedValues) {
     return preSelectedValues.stream()
            .anyMatch(v -> parameterId.startsWith(v.getName()));
}

Y a continuación, la tubería corriente puede tener este aspecto:

Map<String, Collection<String>> filteredParameters = preSelectedValues.entrySet().stream()
    .filter(x -> !isParameterInvalid(x.getKey(), parameters))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Por cierto, ya que sus bucles originales mutan el original Map, se puede lograr lo mismo con removeIf.

Supongo que te gusta

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