gpt4 book ai didi

Java 8 - 使用 startsWith 从列表中过滤字符串 X 并将字符串 X 保存到列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:06 34 4
gpt4 key购买 nike

我是 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());

关于Java 8 - 使用 startsWith 从列表中过滤字符串 X 并将字符串 X 保存到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54096730/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com