java - Java 8 - 使用startsWith从列表中过滤字符串-X并将String-X保存到列表中
问题描述
我是 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.”)列表中的值。
解决方案
简单地说,您使用流的迭代代码可以表示为:
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());
如评论中建议的解决此问题的一般方法可以使用:
List<String> internalIpAddresses = Stream.of("10.11.12.13") // can add more addresses
.filter(ip -> ipAddresses.stream().anyMatch(ip::startsWith))
.collect(Collectors.toList());
推荐阅读
- python - 网页抓取基于 Javascript 的表格
- discord - 删除命令或“触发词”消息
- java - 使用计算机时Java垃圾收集增加?
- java - 使用 For 循环掷 6 个骰子并检查所有值是否相等 - Java
- javascript - 如何从纯 JavaScript 数组创建 kotlin.collections.Set?
- node.js - 按功能组织项目时如何渲染?
- java - 扩展可比的Java优先级队列?
- python - jupyter notebook 不记得 pyLDAvis.prepare()
- java - 列表中带有奇怪边框的JavaFx
- r - 你如何操作 R 的 cuminc 函数的输出