此代码的最短格式是什么?
List<String> supported = Arrays.asList("...");
boolean isSupported = false;
for(String s : supported) {
if(url.startsWith(s)) {
isSupported = true;
break;
}
}
或者这是检查 for-loop 中条件的最短格式?
答案 0 :(得分:12)
如果您使用的是Java 8,则可以在Stream API的帮助下一行完成:
boolean isSupported = supported.stream().anyMatch(s -> url.startsWith(s));
答案 1 :(得分:6)
@Azel +1给出的Java 8答案很精简,可能是您当前设计的最佳答案。但是,我过去遇到了类似的问题,并且发现通过主机识别URL更好,而不仅仅是通过任意的起始子串。我最终做的是创建一个主机地图。然后,我将每个传入的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.");
}
这里的基本思想是我们甚至不需要迭代已批准的域列表,我们可以只针对白名单(或者黑名单)进行持续时间查找。
实际上,您可以使用Java属性文件来存储已知主机列表,然后在需要时加载它。
答案 2 :(得分:0)
这是数组
的最短值boolean isSupported = false;
for(String s : supported)
if(isSupported = url.startsWith(s)) break;
答案 3 :(得分:-2)
您可以创建一种方法,使其更容易。我假设你正在使用数组,但这也适用于列表。
<vector android:alpha="1" android:height="24dp"
android:viewportHeight="512" android:viewportWidth="512"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#ffffff" android:pathData="M487.976,0H24.028C2.71,0 -8.047,25.866 7.058,40.971L192,225.941V432c0,7.831 3.821,15.17 10.237,19.662l80,55.98C298.02,518.69 320,507.493 320,487.98V225.941l184.947,-184.97C520.021,25.896 509.338,0 487.976,0z"/>
</vector>