我是Java8的新手,试图弄清楚流和过滤器是如何与列表一起工作的。我有一个预定义字符串的列表,我有一个我正在处理的字符串值。如果字符串以预定义列表中的任何字符串开始,我想将处理过的字符串添加到一个新列表中。如果字符串与列表中的任何字符串不匹配,那么将其保存到另一个列表中。
例如:
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”),而不是ipAddress
(“10”)中的值或“192.168”。)列表
你能做到的-
ipAddresseses.stream().foreach( ipaddress
-> decideGoodOrBadAndAdd(s);
创建一个方法,将检查它是否是好的或坏的ip地址,并将其添加到相应的列表-
public void decideGoodOrBadAndAdd(String
ipaddress){
if("10.11.12.13".startsWith(ipAddress)) {
goodIpAddresses.add(ipAddress);
}
else if(!"5.6.7.8".startsWith(ipAddress)) {
badIpAddresses.add(ipAddress);
}
}
你可以试试:
ipAddresseses.stream()
.collect(Collectors.partitioningBy(ipAddress -> ipAddress.startsWith("10.11.12.13")));
这将生成一个包含两个元素的映射,一个元素具有良好的IP地址,另一个元素具有较差的IP地址。
简单地说,使用流的迭代代码可以表示为:
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());
问题内容: 我有一个清单 我正在尝试删除其超字符串已经在列表中的字符串。在这种情况下,结果应为: 我已经写了代码: 但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本,而这是我的原始列表。 问题答案: l=[‘abc’,’abcdef’,’def’,’defdef’,’polopolo’] print [j for i, j in enumerate(l) if all(j
所以我知道我可以过滤 JPA中具有findByProperty的特定属性 但是如果我有一组字符串,我如何过滤呢?我不能对一组字符串使用\u属性,因为字符串没有属性? 假设我有以下实体: 和另一个属性为字符串的类: 这是我的存储库:
问题内容: 我想从python中的字符串列表中删除所有空字符串。 我的想法如下: 有没有更多的Python方式可以做到这一点? 问题答案: 我会用: Python 3从返回一个迭代器,因此应包装在对的调用中
我有一个字符串格式的日期列表,如下所示: 我需要以这样的方式映射它,所以我将有一个年份字符串的列表——就像这样: 我的想法是修剪字符串的开头,然后将其附加到新的年份列表中。 最有效的方法是什么?
我想从包含单词Evil(filterString)的数组中删除一些元素。 以下是我从原始阵列(来宾)获得的信息: 只希望客人数组更新一旦所需的字符串(邪恶)被过滤。
嗨,我尝试将以下Source类映射到以下Destation类。我使用了以下映射以将字符串值映射到列表字符串。它没有正确映射。我需要知道如何使用Dozer将2个字符串值映射到一个目标字符串列表中。