ReflectUtil.getFieldsValue增加Filter重载

This commit is contained in:
Looly 2023-10-07 08:52:04 +08:00
parent 3f482e4eda
commit bdf71b5e71
2 changed files with 44 additions and 6 deletions

View File

@ -248,14 +248,22 @@ public class FieldUtil {
* @since 4.1.17
*/
public static Object[] getFieldsValue(final Object obj) {
return getFieldsValue(obj, null);
}
/**
* 获取所有字段的值
*
* @param obj bean对象如果是static字段此处为类class
* @param filter 字段过滤器{@code null}返回原集合
* @return 字段值数组
* @since 5.8.23
*/
public static Object[] getFieldsValue(final Object obj, final Predicate<Field> filter) {
if (null != obj) {
final Field[] fields = getFields(obj instanceof Class ? (Class<?>) obj : obj.getClass());
final Field[] fields = getFields(obj instanceof Class ? (Class<?>) obj : obj.getClass(), filter);
if (null != fields) {
final Object[] values = new Object[fields.length];
for (int i = 0; i < fields.length; i++) {
values[i] = getFieldValue(obj, fields[i]);
}
return values;
return ArrayUtil.map(fields, Object.class, field -> getFieldValue(obj, field));
}
}
return null;

View File

@ -12,6 +12,7 @@
package org.dromara.hutool.core.reflect;
import lombok.Data;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@ -51,4 +52,33 @@ public class FieldUtilTest {
final Field subField = FieldUtil.getField(ReflectUtilTest.TestSubClass.class, "subField");
Assertions.assertNotNull(subField);
}
@Test
void getFieldsValueTest() {
final TestBean testBean = new TestBean();
testBean.setA("A");
testBean.setB(1);
final Object[] fieldsValue = FieldUtil.getFieldsValue(testBean);
Assertions.assertEquals(2, fieldsValue.length);
Assertions.assertEquals("A", fieldsValue[0]);
Assertions.assertEquals(1, fieldsValue[1]);
}
@Test
void getFieldsValueTest2() {
final TestBean testBean = new TestBean();
testBean.setA("A");
testBean.setB(1);
final Object[] fieldsValue = FieldUtil.getFieldsValue(testBean, (field -> field.getName().equals("a")));
Assertions.assertEquals(1, fieldsValue.length);
Assertions.assertEquals("A", fieldsValue[0]);
}
@Data
static class TestBean{
private String a;
private int b;
}
}