Java 传递流顺序的方法引用

Java 传递流顺序的方法引用,java,lambda,java-stream,method-reference,Java,Lambda,Java Stream,Method Reference,我有一个processor类,它接受在流上运行的任意谓词,还有一个用于排序的字段。我的处理器类别: import com.example.vm.domain.Transaction; import lombok.Builder; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.function.Function; import java.util.f

我有一个processor类,它接受在流上运行的任意谓词,还有一个用于排序的字段。我的处理器类别:

import com.example.vm.domain.Transaction;
import lombok.Builder;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

@Builder
public class Processor {

    private Collection<Predicate<Transaction>> predicates;

    public List<Transaction> process(List<Transaction> transactions) {

        return process(transactions, TransactionFields.CATEGORY.getExtractor());
    }

    public List<Transaction> process(List<Transaction> transactions, Function<Transaction, Object> order) {

        if (predicates == null) {
            return transactions;
        }

        if (order == null) {

            return transactions.stream()
                    .parallel()
                    .filter(predicates.stream().reduce(p -> true, Predicate::and))
                    .collect(Collectors.toList());
        } else {

            return transactions.stream()
                    .parallel()
                    .filter(predicates.stream().reduce(p -> true, Predicate::and))
                    .sorted(Comparator.comparing(Transaction::getCategory))
                    .collect(Collectors.toList());

        }
    }
}
变成这样

.sorted(Comparator.comparing(order))
重载调用:

process(transactions, TransactionFields.CATEGORY.getExtractor());
来自枚举以返回提取器字段:

import com.example.vm.domain.Transaction;
import java.util.function.Function;

public enum TransactionFields {

    CATEGORY("category", t -> t.getCategory());

    private String name;
    private Function<Transaction, Object> extractor;

    private TransactionFields(String name, Function<Transaction, Object> extractor) {
        this.name = name;
        this.extractor = extractor;
    }

    public Function<Transaction, Object> getExtractor() {
        return extractor;
    }
}
import com.example.vm.domain.Transaction;
导入java.util.function.function;
公共枚举事务字段{
类别(“类别”,t->t.getCategory());
私有字符串名称;
专用函数提取器;
私有TransactionFields(字符串名称、函数提取器){
this.name=名称;
这个。提取器=提取器;
}
公共函数getExtractor(){
回流提取器;
}
}

我不能让这个工作和铸造一个比较也失败。解决方案不必是比较器,只要排序就行。有人知道如何解决这个问题吗?

比较器的
函数
参数的一般约束是
什么类型有
类别
?它是可比的吗。。。我真不敢相信我错过了。非常感谢你。我试图提高投票率,但我的声誉太低。@notthatironman-你可以点击大复选标记将答案标记为接受✓ 在答案的左边。此操作不要求您至少拥有
15
声誉点。我仍在学习。。。谢谢@Arvind。
import com.example.vm.domain.Transaction;
import java.util.function.Function;

public enum TransactionFields {

    CATEGORY("category", t -> t.getCategory());

    private String name;
    private Function<Transaction, Object> extractor;

    private TransactionFields(String name, Function<Transaction, Object> extractor) {
        this.name = name;
        this.extractor = extractor;
    }

    public Function<Transaction, Object> getExtractor() {
        return extractor;
    }
}