我有以下方法,我将varargs作为输入传递。我试图避免使用HeapPollution,因此除了使用Suppresswarnings进行注释之外,我还要确保我验证我的varargs中的每个arg的类都是相同的或类的后代。我的问题是,如果我发现类不匹配我想返回false;使用ForEach方法(只返回void我只能返回。有没有办法通过返回false直接退出我的ForEach循环。我不想使用增强的For循环[只是因为我正在学习forEach: - )]但是用ForEach方法和lambda表达式实现我想要的。有办法吗?
感谢您提供的任何帮助!
public final <T> boolean exists(T valueToCheck, @SuppressWarnings("unchecked") T... listOfPossibleValues) {
if (valueToCheck == null) return false;
Arrays.asList(listOfPossibleValues).forEach((T value) ->
{ if (!(valueToCheck.getClass().isAssignableFrom(value.getClass()))) return; else System.out.println(value.getClass()); });
for (T value : listOfPossibleValues){
if (value != null ) {
if (value.equals(valueToCheck)) return true;
}
}
return false;
}
答案 0 :(得分:1)
我做了以下,我认为这解决了我的目的。当然不使用ForEach而是使用流和lambda表达式。
return Arrays.asList(listOfPossibleValues).stream().filter(value -> !(valueToCheck.getClass().isAssignableFrom(value.getClass()))).collect(Collectors.toList()).size() > 0;