Java Kotlin中的谓词替换

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

我尝试在Kotlin中创建lambda。 我有以下
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%")
}