我有两个java对象:MyObject和MyObjectDetails
@Data
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Builder
public class MyObjectDetails {
String x;
long y;
}
@Data
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Builder
public class MyObject {
String a;
long b;
String c;
MyObjectDetails myObjectDetails;
}
搜索空值或空字符串的最佳且简单的方法是什么?
实际上,我正在为这个类使用一个特定的验证器,逐字段检查空值和空字符串。
例如,要检查空值,我使用:
private boolean isValidMyObject() {
boolean isNullValuePresentOnDetails = myObject.getMyObjectDetails() == null ? true : Stream.of(myObject.getMyObjectDetails().getX()).anyMatch(Objects::isNull);
boolean isNullValuePresentOnMyObject = Stream.of(myObject.getA(), myObject.getC()).anyMatch(Objects::isNull);
boolean isValid = (isNullValuePresentOnDetails || isNullValuePresentOnMyObject) == true ? false : true;
return isValid;
}
但我也很喜欢将来可以用来制作其他物体的东西。
您可以使用反射从对象中获取所有返回引用(而不是原语)的getter。然后遍历该列表(或数组,您的选择)并执行它们;当其中任何一个的返回值为null
时,返回false
或抛出适当的异常。
有点像这样:
public final void validateNonNull( final Object candidate ) throws ValidationException
{
if( isNull( candidate ) throw new ValidationException( "candidate is null" );
final var candidateClass = candidate.getClass();
final List<Method> getters = Arrays.stream( candidateClass.getMethods() ) // getters are always public!
.filter( m -> !m.getName().equals( "getClass" ) )
.filter( m -> m.getName().startsWith( "get" ) )
.filter( m -> m.getParameterCount() == 0 )
.filter( m -> !m.getReturnType().isPrimitive() )
.collect( Collectors.toList() );
for( var method : methods )
{
if( isNull( method.invoke( candidate ) ) throw new ValidationException( "candidate.%s() returned null".formatted( method.getName() ) );
}
}
ValidationException
是一个自定义异常,您需要声明为omeo声明的检查异常d::调用
。
要检查空字符串,也可以像这样更改循环的:
…
for( var method : methods )
{
var retValue = method.invoke( candidate );
if( retValue instanceof String aString && aString.isEmpty() ) throw new ValidationException( "candidate.%s() returned the empty String".formatted( method.getName() ) );
if( isNull( retValue ) throw new ValidationException( "candidate.%s() returned null".formatted( method.getName() ) );
}
问题内容: 我有一个对象列表,列表很大。对象是 现在,我必须在列表中搜索对象的特定值。假设 我必须返回那些对象(我的搜索并不总是基于value3) 清单是 有效的方法是什么? 谢谢。 问题答案: 您可以尝试使用Apache Commons Collections。 有一个CollectionUtils类,允许您通过自定义谓词选择或过滤项目。 您的代码将如下所示: 更新: 在 java8中 ,使用
我有一个对象列表,列表很大。对象是 现在我必须在列表中搜索一个对象的特定值。假设我必须返回这些对象(我的搜索不总是基于value3) 该列表为
问题内容: 我有点迷茫,无法做到最快。我有一大堆具有基本变量属性的对象(带有getters / setters方法),我需要在此列表中进行搜索以找到列表中与给定参数匹配的对象 我已经找到了如何进行常规列表搜索的方法,但是我需要进行搜索,例如搜索列表中每个对象的调用getName()的结果的值,并获取结果与我的输入匹配的对象。 如下所示,第三个参数是方法调用的结果,第二个是我要查找的结果。 任何建议
假设mongodb文档(表)“users”为 我想找到1975年必须获得“国家奖章”的人,可能还有其他人在不同的年份获得该奖项。 我怎样才能找到这个人使用奖励类型和年份。所以我可以得到确切的人。
在springboot中,您可以拥有一个
我试图根据用户输入找到一个特定的对象。用户需要输入姓名和性别,然后程序应该搜索ArrayList,查看是否有匹配的姓名和性别。ArrayList中的对象有3个实例变量,但程序只搜索2个。如何在ArrayList中只搜索选定的几个特征? 在我的项目中,我有: 其中,nameList是ArrayList的名称,getName()是返回存储在对象中的名称的方法的名称,getGender()是返回存储在对