diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/FieldUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/FieldUtil.java index b3b507db9..e31c11e19 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/FieldUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/FieldUtil.java @@ -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 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; diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/reflect/FieldUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/reflect/FieldUtilTest.java index 74a829175..8b37f0461 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/reflect/FieldUtilTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/reflect/FieldUtilTest.java @@ -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; + } }