我有以下方法
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
和a
List<String> ABC
Run Code Online (Sandbox Code Playgroud)
如何使用Java 8 lambda表达式检查ABC是否按升序/降序排列?
多谢
Stu*_*rks 11
我将回答有关检查列表元素是否顺序正确的部分.(我不知道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));
Run Code Online (Sandbox Code Playgroud)
这将验证列表是否按升序排序.要检查降序,只需在谓词中使用大于而不是小于.
可能有一种聪明的方法可以使用收藏家来做类似的事情,但似乎我觉得它会更复杂.
根据 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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3149 次 |
| 最近记录: |