(谓词<?super String> s)或(String s)

Opt*_*ght 8 java string predicate java-8 java-stream

我有一个TreeSet字符串(硬编码).想要检查给定的参数String例如."Person"如果存在于TreeSet中则返回true否则返回false.

在这里我对关于(Predicate<? super String> s)vs 的Eclipse消息感到困惑 (String s):

类型Stream中的方法anyMatch(Predicate)不适用于参数(String)

请指导.

import java.util.Set;
import java.util.TreeSet;
import java.util.function.Predicate;

public class SystemLabelValidator {

    public static boolean ValidateSystemLabel( String s) {  

        String j = s;

        boolean b = false;

        Set <String> SystemLabels = new TreeSet<String>();
        // Unique Strings
        SystemLabels.add("Person");
        SystemLabels.add("Player");
        SystemLabels.add("Hospital");
        SystemLabels.add("Nurse");
        SystemLabels.add("Room");

        System.out.println("\n==> Loop here.");
        for (String temp : SystemLabels) {
            System.out.println(temp);

            if(SystemLabels.stream().anyMatch(j)) {
                System.out.println("I need to return Boolean");
            }
            return b;
        }
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*s K 10

这里没有必要使用谓词.为了检查您刚才使用的字符串是否存在TreeSet:

return systemLabels.contains("Person");
Run Code Online (Sandbox Code Playgroud)

如果您仍坚持使用anyMatch,那么您可以:

public static boolean validateSystemLabel(String s) {
    return systemLabels.stream().anyMatch(i -> i.equals(s));
}
Run Code Online (Sandbox Code Playgroud)

请记住,谓词表达式需要求值为布尔值,但在代码中,您传入的是String,因此编译错误.