Java 8 - Filtro de una cadena-X de una lista usando startsWith y guarda la cadena-X a una lista

aMagic:

Soy nuevo en Java 8 y tratando de conseguir mi cabeza alrededor de cómo funciona el filtro y corrientes con la lista. Tengo una lista de cadenas predefinidas y tengo un valor de cadena que estoy procesando. Quiero añadir la cadena de procesado a una nueva lista si la cadena comienza con cualquiera de las cadenas de la lista predefinida. Si la cadena no coincide con cualquier cadena de la lista a continuación, guardar en otra lista.

Por ejemplo:

List<String> internalIpAddresses= new ArrayList<>();
List<String> externalIpAddresses = new ArrayList<>();

List<String> ipAddresseses = new ArrayList<String>();
ipAddresses.add("10.");
ipAddresses.add("132.174.");
ipAddresses.add("192.168.");

// filter internal ip addresses
for(String ipAddress : ipAddresseses){

     if("10.11.12.13".startsWith(ipAddress)) {
          internalIpAddresses.add("10.11.12.13");
     }
}

// filter external ip addresses
for(String ipAddress : ipAddresseses){

     if(!"5.6.7.8".startsWith(ipAddress)) {
          externalIpAddresses .add("5.6.7.8");
     }
}

Resultado:

internalIpAddresses: 10.11.12.13
externalIpAddresses : 5.6.7.8 

¿Hay alguna manera esto se puede lograr de manera más sencilla utilizando corriente en Java 8?

Me gusta:

ipAddresseses.stream()
     .filter(ipAddress -> clientIpAddress.startsWith(ipAddress)
     .*if the clientIpAddress starts with any of the values in the list then add to internalIpAddresses List
     .*if clientIpAddress doesn't start with any values in list then add to externalIpAddresses List

Al final quiero salvar el clientIpAddress( "10.11.12.13" o "5.6.7.8"), no los valores de la ipAddresses( "10" o "192.168".) Lista.

también:

Simplemente, su código iterativo utilizando corrientes puede ser representada como:

List<String> ipAddresses = Arrays.asList("10.", "132.174.", "192.168.");

List<String> internalIpAddresses = ipAddresses.stream()
        .filter("10.11.12.13"::startsWith)
        .map(ipAddress -> "10.11.12.13")
        .collect(Collectors.toList());

List<String> externalIpAddresses = ipAddresses.stream()
        .filter(ipAddress -> !"5.6.7.8".startsWith(ipAddress)) // I doubt this should be '.filter("5.6.7.8"::startsWith)'
        .map(ipAddress -> "5.6.7.8")
        .collect(Collectors.toList());

Un enfoque general como se sugiere en los comentarios para la solución de este podría ser el uso de:

List<String> internalIpAddresses = Stream.of("10.11.12.13") // can add more addresses
        .filter(ip -> ipAddresses.stream().anyMatch(ip::startsWith))
        .collect(Collectors.toList());

Supongo que te gusta

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