Browse Source

!152 添加自定义判断集合是否包含某类值的工具方法
Merge pull request !152 from Ease/feature/list

Looly 5 years ago
parent
commit
55942a9147

+ 21 - 0
hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java

@@ -50,6 +50,7 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * 集合相关工具类
@@ -411,6 +412,26 @@ public class CollUtil {
 	}
 
 	/**
+	 * 自定义函数判断集合是否包含某类值
+	 *
+	 * @param collection 集合
+	 * @param containFunc 自定义判断函数
+	 * @param <T> 值类型
+	 * @return 是否包含自定义规则的值
+	 */
+	public static <T> boolean contains(Collection<T> collection, Predicate<? super T> containFunc) {
+		if (isEmpty(collection)) {
+			return false;
+		}
+		for (T t : collection) {
+			if (containFunc.test(t)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
 	 * 其中一个集合在另一个集合中是否至少包含一个元素,即是两个集合是否至少有一个共同的元素
 	 *
 	 * @param coll1 集合1

+ 7 - 0
hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java

@@ -20,6 +20,13 @@ import java.util.*;
 public class CollUtilTest {
 
 	@Test
+	public void testPredicateContains() {
+		ArrayList<String> list = CollUtil.newArrayList("bbbbb", "aaaaa", "ccccc");
+		Assert.assertTrue(CollUtil.contains(list, s -> s.startsWith("a")));
+		Assert.assertFalse(CollUtil.contains(list, s -> s.startsWith("d")));
+	}
+
+	@Test
 	public void testPadLeft() {
 		List<String> srcList = CollUtil.newArrayList();
 		List<String> answerList = CollUtil.newArrayList("a", "b");