Я новичок в Java 8 и пытаюсь понять, как потоки и фильтры работают со списком. У меня есть список предопределенных строк, и у меня есть строковое значение, которое я обрабатываю. Я хочу добавить обработанную строку в новый список, если строка начинается с какой-либо из строк в предопределенном списке. Если строка не соответствует ни одной строке из списка, сохраните ее в другом списке.
Например:
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");
}
}
Результат:
internalIpAddresses: 10.11.12.13
externalIpAddresses : 5.6.7.8
Есть ли способ, которым это может быть достигнуто более простым способом с помощью потока в Java 8?
Как:
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
В конце я хочу сохранить clientIpAddress
("10.11.12.13" или "5.6.7.8"), а не значения из списка ipAddresses
("10." или "192.168.").