java去掉实体类的空属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java去掉实体类的空属性相关的知识,希望对你有一定的参考价值。

开发语言
关于java:从列表中删除具有空属性的对象的最有效方法


在Java 8中:

1

objects.removeIf(o -> o.getAttribute() == null);

在以前的版本中:

1
2
3
4

for (Iterator<MyObject> it = objects.iterator(); it.hasNext();)
if (it.next().getAttribute() == null)
it.remove();


另请参见在迭代时从java中的集合中删除项目。 (您显示的for循环可能抛出ConcurrentModificationException。)
这两种方法均效率更高,因为它们允许集合按照自己想要的方式进行迭代和删除,但是除非您拥有庞大的集合并执行大量操作,否则我认为这在这里并不特别重要。

作为一个更好的例子,问题显示的代码对链表的时间复杂度较差(我认为在最坏的情况下类似于O(n2/2)),因为对objects.remove的调用需要另一个遍历。 使用Iterator可使列表删除而无需遍历。
但是,对于ArrayList,使用Iterator仍然很困难,因为元素每次都会移动。 Java 8版本是最好的。 ArrayList使用BitSet并立即进行所有移位。

啊,甚至都没有想到会抛出该异常。 不幸的是,我在当前不使用Java 8的环境中工作,因此使用迭代器的后一种选项是我必须使用的选项。 但是如果我决定在这里升级我们的Java版本,我会把removeIf保留在我的脑海中。 谢谢您的帮助!
迭代器非常难看。 :)
参考技术A 这两种方法均效率更高,因为它们允许集合按照自己想要的方式进行迭代和删除,但是除非您拥有庞大的集合并执行大量操作,否则我认为这在这里并不特别重要。
作为一个更好的例子,问题显示的代码对链表的时间复杂度较差(我认为在最坏的情况下类似于O(n2/2)),因为对objects.remove的调用需要另一个遍历。 使用Iterator可使列表删除而无需遍历。
但是,对于ArrayList,使用Iterator仍然很困难,因为元素每次都会移动。 Java 8版本是最好的。 ArrayList使用BitSet并立即进行所有移位。
啊,甚至都没有想到会抛出该异常。 不幸的是,我在当前不使用Java 8的环境中工作,因此使用迭代器的后一种选项是我必须使用的选项。
参考技术B 在使用Oracle数据库时经常出现数据库char字段被空字符填充的情况,在写业务代码时需要对字段进行处理,BeanHelper.beanAttributeValueTrim(object);

public class BeanHelper
public static void beanAttributeValueTrim(Object bean) throws Exception
if (bean != null)
Field[] fields = bean.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++)
Field f = fields[i];
if (f.getType().getName().equals("java.lang.String"))
String key = f.getName();
Object value = getFieldValue(bean, key);
if (value == null)
continue;
setFieldValue(bean, key, value.toString().trim());




private static Object getFieldValue(Object bean, String fieldName) throws Exception
StringBuffer result = new StringBuffer();
String methodName = result.append("get")
.append(fieldName.substring(0, 1).toUpperCase())
.append(fieldName.substring(1)).toString();
Object rObject = null;
Method method = null;
Class[] classArr = new Class[0];
method = bean.getClass().getMethod(methodName, classArr);
rObject = method.invoke(bean, new Object[0]);
return rObject;

private static void setFieldValue(Object bean, String fieldName, Object value) throws Exception
StringBuffer result = new StringBuffer();
String methodName = result.append("set")
.append(fieldName.substring(0, 1).toUpperCase())
.append(fieldName.substring(1)).toString();
Class[] classArr = new Class[1];
classArr[0] = "java.lang.String".getClass();
Method method = bean.getClass().getMethod(methodName, classArr);
method.invoke(bean, value);

以上是关于java去掉实体类的空属性的主要内容,如果未能解决你的问题,请参考以下文章

java中循环遍历实体类的属性和数据类型以及属性值

java中如何遍历实体类的属性和数据类型以及属性值

java怎么去掉List中实体类字段重复字段

Java关于反射

java实体的属性名怎么设置成 带.

如何获得实体类里属性本身?