(Predicate<? super String> s) 或 (String s)
(Predicate<? super String> s) or (String s)
我有 TreeSet
个字符串(硬编码)。
想要检查给定的参数字符串,例如。 "Person" 如果存在于 TreeSet 中则 return true
否则 return false
.
在这里,我对关于 Eclipse 的消息感到困惑
(Predicate<? super String> s)
对比 (String s)
:
The method anyMatch(Predicate) in the type Stream is not applicable for the arguments (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;
}
}
这里不需要使用Predicate。为了检查 String 是否存在于您的 TreeSet
中,只需使用 :
return systemLabels.contains("Person");
如果你还是坚持使用anyMatch那么你可以这样做:
public static boolean validateSystemLabel(String s) {
return systemLabels.stream().anyMatch(i -> i.equals(s));
}
请记住,predicate 表达式需要求值为 boolean 值,但在代码中,您传入的是 String 因此编译错误。
您的解决方案中的问题是这一行:
SystemLabels.stream().anyMatch(j);
基本上 anyMatch() 期望 Predicate
作为输入而不是 String
。
但是你的问题有更简单的解决方案:
import java.util.Set;
import java.util.TreeSet;
public class SystemLabelValidator {
private static final Set<String> SYSTEM_LABLES = new TreeSet<>(Arrays.asList("Person", "Player", "Hospital", "Nurse", "Room"));
public static boolean validateSystemLabel( String value) {
return SYSTEM_LABLES.contains(value);
}
}
anyMatch
的签名是
boolean anyMatch(Predicate<? super T> predicate)
在你的例子中,参数必须是 Predicate<? super String>
。也就是说,一个方法可以接受一个字符串和 return 一个布尔值。此方法正在寻找以下之一
Predicate<String> (e.g. String::isEmpty)
Predicate<Object> (e.g. Objects::isNull)
Predicate<CharSequence>
Predicate<Comparable<String>>
Predicate<Serializable>
您试图给它一个与签名不匹配的字符串。解决此问题的一种方法是:
if(SystemLabels.stream().anyMatch(j::equals)) {
System.out.println("I need to return Boolean");
}
我有 TreeSet
个字符串(硬编码)。
想要检查给定的参数字符串,例如。 "Person" 如果存在于 TreeSet 中则 return true
否则 return false
.
在这里,我对关于 Eclipse 的消息感到困惑
(Predicate<? super String> s)
对比 (String s)
:
The method anyMatch(Predicate) in the type Stream is not applicable for the arguments (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;
}
}
这里不需要使用Predicate。为了检查 String 是否存在于您的 TreeSet
中,只需使用 :
return systemLabels.contains("Person");
如果你还是坚持使用anyMatch那么你可以这样做:
public static boolean validateSystemLabel(String s) {
return systemLabels.stream().anyMatch(i -> i.equals(s));
}
请记住,predicate 表达式需要求值为 boolean 值,但在代码中,您传入的是 String 因此编译错误。
您的解决方案中的问题是这一行:
SystemLabels.stream().anyMatch(j);
基本上 anyMatch() 期望 Predicate
作为输入而不是 String
。
但是你的问题有更简单的解决方案:
import java.util.Set;
import java.util.TreeSet;
public class SystemLabelValidator {
private static final Set<String> SYSTEM_LABLES = new TreeSet<>(Arrays.asList("Person", "Player", "Hospital", "Nurse", "Room"));
public static boolean validateSystemLabel( String value) {
return SYSTEM_LABLES.contains(value);
}
}
anyMatch
的签名是
boolean anyMatch(Predicate<? super T> predicate)
在你的例子中,参数必须是 Predicate<? super String>
。也就是说,一个方法可以接受一个字符串和 return 一个布尔值。此方法正在寻找以下之一
Predicate<String> (e.g. String::isEmpty)
Predicate<Object> (e.g. Objects::isNull)
Predicate<CharSequence>
Predicate<Comparable<String>>
Predicate<Serializable>
您试图给它一个与签名不匹配的字符串。解决此问题的一种方法是:
if(SystemLabels.stream().anyMatch(j::equals)) {
System.out.println("I need to return Boolean");
}