这段代码的最短形式是什么?
List<String> supported = Arrays.asList("...");
boolean isSupported = false;
for(String s : supported) {
if(url.startsWith(s)) {
isSupported = true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
或者这是检查for循环中条件的最短形式?
Aze*_*zel 12
如果您使用的是Java 8,可以在Stream API的帮助下在一行中完成:
boolean isSupported = supported.stream().anyMatch(s -> url.startsWith(s));
Run Code Online (Sandbox Code Playgroud)
@Azel +1给出的Java 8答案很精简,可能是您当前设计的最佳答案.但是,我不得不在过去你类似的问题,并发现它更好地利用他们的主人利用任意开始串识别的网址,而不是只.我最终做的是创建一个主机地图.然后,我将每个传入的URL Map与之比较,如下所示:
Map<String, Integer> hosts = new HashMap<>();
hosts.add("google.com", 1);
hosts.add("stackoverflow.com", 1);
hosts.add("wordpress.com", 1);
URL url = new URL("http://www.google.com");
String host = url.getHost();
if (hosts.containsKey(host)) {
System.out.println("Found " + url + " in list of approved hosts.");
}
Run Code Online (Sandbox Code Playgroud)
这里的基本思想是我们甚至不需要迭代已批准的域列表,我们可以只针对白名单(或者黑名单)进行持续时间查找.
实际上,您可以使用Java属性文件来存储已知主机的列表,然后在需要时加载它.