用于检查for循环内部条件的最短代码

时间:2018-04-20 01:36:51

标签: java

此代码的最短格式是什么?

List<String> supported = Arrays.asList("...");
boolean isSupported = false;
for(String s : supported) {
    if(url.startsWith(s)) {
       isSupported = true;
       break;
    }
}

或者这是检查 for-loop 中条件的最短格式?

4 个答案:

答案 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>