Java Kotlin中的谓词替换
我尝试在Kotlin中创建lambda。 我有以下Java Kotlin中的谓词替换,java,kotlin,Java,Kotlin,我尝试在Kotlin中创建lambda。 我有以下Java接口: public interface Specification<T> extends Serializable { @Nullable Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder); } 使用Java 8,我可以将其剪切为labda,如: private S
Java
接口:
public interface Specification<T> extends Serializable {
@Nullable
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder);
}
使用Java 8,我可以将其剪切为labda,如:
private Specification<Product> nameLike(String name) {
return (root, query, criteriaBuilder)
-> criteriaBuilder.like(root.get(Product_.NAME), "%"+name+"%");
}
我找到了解决办法!当我开始大致实现问题中第二个代码示例的选项时,IDE建议这样做:
fun nameLike(name: String) = Specification { root: Root<Product>, query: CriteriaQuery<*>, builder: CriteriaBuilder ->
builder.like(root.get("name"), "%$name%")
}
fun-nameLike(name:String)=规范{root:root,query:CriteriaQuery,builder:CriteriaBuilder->
builder.like(root.get(“name”),“%$name%”)
}
这对我来说很好哪里是不会编译的代码,发布后再加上您可以使用Java的多个lambda参数以及kotlin@AnaniyaJemberu更新
class ProductSpecification {
fun nameLike(name: String): (Root<Product>, CriteriaQuery<Product>, CriteriaBuilder) -> Predicate = {
root, query, builder -> builder.like(root.get("name"), "%$name%")
}
}
repository.findAll(ProductSpecification().nameLike("fff"))
fun nameLike(name: String) = Specification { root: Root<Product>, query: CriteriaQuery<*>, builder: CriteriaBuilder ->
builder.like(root.get("name"), "%$name%")
}