diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java
index 05e0d78d962e34c205e5e232a1610f77e6ca9512..7013d54e8aa3703a805dfa956fd84b11f03f0b87 100755
--- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java
@@ -1641,6 +1641,24 @@ public class CollUtil {
});
}
+ /**
+ * 查找第一个匹配元素对象
+ * 使用 Lambda 表达式提取字段值进行匹配(类型安全、性能更好)
+ *
+ * @param 集合元素类型
+ * @param collection 集合
+ * @param fieldExtractor 用于从元素中提取字段值的函数
+ * @param fieldValue 期望匹配的字段值
+ * @return 满足条件的第一个元素
+ * @since 5.8.43
+ */
+ public static T findOneByField(Iterable collection, final Function fieldExtractor, final Object fieldValue){
+ return findOne(collection,t -> {
+ final Object value = fieldExtractor.apply(t);
+ return ObjectUtil.equal(value, fieldValue);
+ });
+ }
+
/**
* 集合中匹配规则的数量
*
diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java
index 61b17a1d652b757bcd22da6a4a6f11b3ca492fc8..fd871f58f2026c90214d3795ff06248b3be07616 100755
--- a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java
@@ -1516,4 +1516,38 @@ public class CollUtilTest {
assertTrue(CollUtil.containsAll(coll1, coll2));
}
+
+ @Test
+ public void testFindOneByField(){
+ Animal dog = new Animal("dog", 2);
+ Animal cat = new Animal("cat", 3);
+ Animal bear = new Animal("bear", 4);
+
+ List list = new ArrayList<>();
+ list.add(dog);
+ list.add(cat);
+ list.add(bear);
+ assertEquals(CollUtil.findOneByField(list,Animal::getName,"dog"),dog);
+
+
+ // 测试map
+ Map map1 = new HashMap<>();
+ map1.put("name","dog");
+ map1.put("age","2");
+
+ Map map2 = new HashMap<>();
+ map2.put("name","cat");
+ map2.put("age","3");
+
+ Map map3 = new HashMap<>();
+ map3.put("name","bear");
+ map3.put("age","4");
+
+ List