如何使用Java8Lambda表达式检查列表的正确顺序?

如何使用Java8Lambda表达式检查列表的正确顺序?,lambda,java-8,Lambda,Java 8,我有下面的方法 private <T> void verify(String message, Supplier<T> targetSupplier, Predicate<T> predicate) { String verification = "verify that " + message; System.out.println(" -> " + verification); long start = Sys

我有下面的方法

private <T> void verify(String message, Supplier<T> targetSupplier,
        Predicate<T> predicate) {
    String verification = "verify that " + message;
    System.out.println(" -> " + verification);
    long start = System.currentTimeMillis();
    while ((System.currentTimeMillis() - start) < timeoutInMs) {
        try {
            T target = targetSupplier.get();
            if (predicate.test(target)) {
                return Verification.ok();
            }
            result = Verification.ko();
        } catch (NotFoundException e) {
            result = Verification.notFound();
        }
    }
}
私有无效验证(字符串消息、供应商目标供应商、,
谓词(谓词){
字符串验证=“验证”+消息;
系统输出打印项次(“->”+验证);
长启动=System.currentTimeMillis();
while((System.currentTimeMillis()-start)

列出ABC
如何使用Java8Lambda表达式检查ABC是否按升序/降序排列


非常感谢

我将回答有关检查列表元素顺序是否正确的部分。(我不知道问题中的
verify
方法和参数的用途。)

流操作在处理集合(或其他流源)中的单个值时效果良好,但在处理相邻元素时效果较差。如果您有一个随机访问集合,那么通常可以使用索引流技术,按索引从列表中提取相邻元素,并使用排序谓词进行比较

由于要确定是否所有元素都已排序,请使用
Stream.allMatch
组合应用于所有相邻对的排序谓词的结果

List<String> ABC = ... ;
boolean sortedAscending =
    IntStream.range(0, ABC.size()-1)
        .allMatch(i -> ABC.get(i).compareTo(ABC.get(i+1)) <= 0));
列出ABC=;
布尔排序=
IntStream.range(0,ABC.size()-1)

.allMatch(i->ABC.get(i).compareTo(ABC.get(i+1))根据Stuart Marks的建议,这是我的最终代码

public void inAscOrder() {
    verify("stringInASCOrder",
            this::findMultiple,
            elements -> IntStream.range(0, elements.size() - 1).allMatch(
                    i -> elements.get(i).getText()
                            .compareTo(elements.get(i + 1).getText()) <= 0));
}
public void inAscOrder(){
验证(“StringinaRecorder”,
这个::findMultiple,
elements->IntStream.range(0,elements.size()-1).allMatch(
i->elements.get(i).getText()

.compareTo(elements.get(i+1).getText())@nosid是的,很好,谢谢,我已经这么做了。但这取决于发问者是否希望列表严格升序,或者是否允许重复。斯图尔特·马克斯,nosid感谢你的帮助。在列表中获得重复项是可以的。
public void inAscOrder() {
    verify("stringInASCOrder",
            this::findMultiple,
            elements -> IntStream.range(0, elements.size() - 1).allMatch(
                    i -> elements.get(i).getText()
                            .compareTo(elements.get(i + 1).getText()) <= 0));
}