Tag: 谓词

如何在Java中实现Predicate,用于针对任意数量的规则交叉检查String?

这个问题是一个延续: 如何检查输入是否符合Java中的任意数量的规则? 我正在尝试使用Predicates来交叉检查一组返回布尔值的规则/方法的字符串/单词。 但是我在代码中实现它时遇到了困难。 public class CapValidator { /** PRIMARY METHODS **/ private boolean capitalize(String word) { // boolean valid = true; // for (Predicate rule : rules) { // valid = valid && rule.test(word); // } return false; } /** SUPPORT METHODS **/ private boolean isNoun(String word) { // do some logic } private […]

Java 8 – 如何使用带参数函数的谓词?

我有以下代码: public boolean isImageSrcExists(String imageSrc) { int resultsNum = 0; List blogImagesList = driver.findElements(blogImageLocator); for (WebElement thisImage : blogImagesList) { if (thisImage.getAttribute(“style”).contains(imageSrc)) { resultsNum++; } } if (resultsNum == 2) { return true; } else { return false; } } 将其转换为使用Java 8 Stream的正确方法是什么? 当我尝试使用map() ,我得到一个错误,因为getAttribute不是一个Function 。 int a = (int) blogImagesList.stream() .map(WebElement::getAttribute(“style”)) .filter(s -> s.contains(imageSrc)) […]

Java使用仿函数连接集合

给出了2个具有相同数量元素的集合,比如List 。 JAVA有哪些优雅的方法可以在具有相应索引的集合的每个2个元素上应用仿函数? 比如,一个例子可能是: List = { “APPLE”, “PEAR” }; List = { “BANANA”, “ORANGE” }; 将字符串连接在一起的谓词将导致以下List : List = { “APPLEBANANA”, “PEARORANGE” };

Java 1.5等同于.Net中的Predicate 方法吗?

具体来说,我正在为Collection.TrueForAll / Exists等寻找类似的干净表示法。 编写一个foreach循环来检查每个对象上方法的返回感觉很臭,所以我希望有一个更好的Java习语。

创建lambda表达式的字符串表示

出于调试目的,我试图在Java 8中创建lambda表达式的字符串表示(特别是Predicate s,尽管它对其他lambda表达式也很有意义)。我的想法是这样的: public class Whatever { private static String predicateToString(Predicate predicate) { String representation = … // do magic return representation; } public static void main(String[] args) { System.out.println(Whatever.predicateToString(i -> i % 2 == 0)); } } 输出将是i -> i % 2 == 0 (或逻辑等价的东西)。 toString()方法似乎没有任何帮助,输出就像com.something.Whatever$$Lambda$1/1919892312@5e91993f (我想这是因为toString()没有被覆盖)。 我不确定这样的东西是否可能,例如reflection,到目前为止我当然无法找到任何东西。 有任何想法吗?

是否有一种方便的方法来创建一个测试字段是否等于给定值的谓词?

我经常发现自己需要过滤Stream或使用谓词来检查给定字段是否具有给定值。 比方说,我有这个POJO: public class A { private Integer field; public A(final Integer field) { this.field = field; } public Integer getField() { return field; } } 我想根据field的值过滤对象Stream : final Integer someValue = 42; Stream.of(new A(42), new A(1729), new A(42), new A(87539319), new A(null)) .filter(a -> Objects.equals(a.getField(), someValue)) … 是否有一种方便的方法来生成filter方法的谓词? 我注意到有Predicate.isEqual但它不符合需要。 我可以很容易地写一个这样的: public static Predicate isEqual(Function […]