草庐IT

predicate

全部标签

java - 将参数传递给谓词

我有以下搜索条件图:privatefinalMapsearchMap=newHashMap();privatevoidinitSearchMap(){PredicateallDrivers=p->p.getAge()>=16;PredicateallDraftees=p->p.getAge()>=18&&p.getAge()allPilots=p->p.getAge()>=23&&p.getAge()我按以下方式使用这张map:pl.stream().filter(search.getCriteria("allPilots")).forEach(p->{p.printl(p.getPr

java - 是否有与 .Net 中的 Predicate<T> 方法等效的 Java 1.5?

具体来说,我正在寻找与Collection.TrueForAll类似的简洁符号/Exists等不得不编写一个foreach循环来检查每个对象的方法返回,这感觉很糟糕,所以我希望有一个更好的Java习惯用法。 最佳答案 Predicates在GoogleCollections中提供图书馆。 关于java-是否有与.Net中的Predicate方法等效的Java1.5?,我们在StackOverflow上找到一个类似的问题: https://stackoverfl

java - 如何有条件地替换 Collection 中的值,例如 replaceIf(Predicate<T>)?

如果List或Collection中的值为null,是否有任何简单的方法可以替换该值?我们总能做到list.stream().filter(Objects::nonNull);并可能将0添加回列表。但我正在寻找的是类似list.replaceIf(Predicate)的API. 最佳答案 这只适用于List,不适用于Collection,因为后者没有替换或设置元素的概念。但是给定一个List,使用List.replaceAll()方法很容易做你想做的事情:Listlist=Arrays.asList("a","b",null,"c"

java - 如何根据条目集过滤 map 条目

我正在使用googleguava12并有一张map:MaproomPrice;我有一套:Setpolicy;如何根据policy过滤roomPricemap中的条目并返回过滤后的map?filteredMap需要拥有来自policy的所有值。如果roomPricemap没有政策条目,我想改为输入默认值。 最佳答案 因为你有一组键,你应该使用Maps.filterkeys(),Guava还提供了一组非常好的谓词,您可以开箱即用。在您的情况下,类似于Predicates.in()应该可以。所以基本上你最终会得到:MapfilteredM

java - 使用 Set<String> 和 String 作为参数创建自定义谓词

我有一个String作为“ishant”和Set作为["Ishant","Gaurav","sdnj"]。我需要为此编写谓词。我试过下面的代码,但它不工作Predicate,String>checkIfCurrencyPresent=(currencyList,currency)->currencyList.contains(currency);如何创建Predicate这需要Set和String作为参数并能给出结果? 最佳答案 APredicate您当前使用的表示一个参数的谓词(boolean值函数)。您正在寻找BiPredica

Java 8 - 使用 BiPredicate 进行过滤

我有一个整数流,我想找到两个数字之和等于另一个数字。所以我想出了以下解决方案:BiPredicatep=(price1,price2)->price1.intValue()+price2.intValue()==moneyQty;flavoursPrices.filter(p);但是filter方法没有接收到一个BiPredicate。为什么不?有什么替代方案? 最佳答案 您仍然可以使用Bipredicate。filter-method需要的参数是一个Predicate,下面是一个如何使用这个BiPredicate的例子:BiPre

Java:组合多个谓词

在Java中,有没有一种简洁优雅的方法可以将多个谓词(GuavaPredicate)组合成一个?目前,我有一些谓词列表:Collection>preds=...;我有一些代码循环遍历谓词并在其中任何一个为假时返回假。有没有一种单行代码可以完成同样的事情? 最佳答案 如果您使用的是Guava,看起来Predicates#and会执行您想要的操作。 关于Java:组合多个谓词,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 如何使用 bind 基于::second pair 成员排序的 std::pair 创建集合

我知道我可以使用以下内容:templatestructComparePairThroughSecond:publicstd::unary_function{booloperator()(constPair&p1,constPair&p2)const{returnp1.second,ComparePairThroughSecond>somevar;但想知道是否可以用boost::bind来完成 最佳答案 下一个怎么样。我正在使用boost::function来“删除”比较器的实际类型。比较器是使用boost:bind本身创建的。typ

c++ - SFINAE 在评估模板参数中的 constexpr 时失败?

出于某种原因,此constexpr在模板参数上下文中未被正确评估:#include#includenamespacedetail{//Reasontouseanenumclassrahterthanjustanintissoastoensure//therewillnotbeanyclashesresultinginanambigiousoverload.enumclassenabler{enabled};}#defineENABLE_IF(...)std::enable_if_t=detail::enabler::enabled#defineENABLE_IF_DEFINITION(

c++ - 没有 "predicate"的对 vector 上的 max_element

我想找到pairs的vector的最大元素。我的标准是:最大元素是一对中第二个值最高的元素。我这样做了:automax_angle=std::max_element(begin(angles),end(angles),[](conststd::pair&left,conststd::pair&right){returnleft.second不写谓词是否可以做到?由于它是标准结构,是否有更简单的配对方法? 最佳答案 不,你不能,因为默认情况下std::pair是按字典顺序比较的,这意味着从左到右逐元素。因此,您的解决方案是您可以拥有的