java 流 : collect taking in mind stream is empty

标签 java java-stream

我想使用类似Optional的代码构建一个Sort对象:

private Sort buildSort(Collection<String> fields) {
    fields.stream()
        .map(this::buildOrder)
        .collect(Sort.unsorted(), ????, ????);
}

buildOrder 是:

private Order buildOrder(String field) {
    if (field.startsWith("-")) {
        return Order.desc(field.substring(1));
    }
    else {
        return Order.asc(field);
    }
}

如果流为空,我需要返回一个 Sort.unsorted(),或者组合每个 Sort 对象。

Sort 对象有一个 and 方法,代表构建和连接顺序。

Sort.by(sort1)
    .and(sort2)...

所以我需要:

if (stream is empty) then
  return Sort.unsorted
else
  return foreach item in stream:
     Sort.by(item).and(item2).and(item3)...

类(class):

org.springframework.data.domain.Sort
org.springframework.data.domain.Sort.Order

注意

我需要使用stream-api!

最佳答案

我相信这应该有效。第二个 map 将每个 Order 转换为其自己的 Sort。然后累加器和组合器只需将 Sorts 添加在一起即可。

return fields.stream()
    .map(this::buildOrder)
    .map(Sort::by)
    .collect(Sort::unsorted, Sort::and, Sort::and);

关于java 流 : collect taking in mind stream is empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54744078/

相关文章:

java - 只要用户输入不等于某些单词就运行的 while 循环不起作用?

Java - 将 UTF-8 字符串转换为二进制的正确方法是什么?

java - 当存在重复标签时,在JAVA中解析XML

java - 如何在 Spring-XD 作业中使用 shellCommandProceccesor

tree-traversal - 如何在java中将树结构转换为节点流

java - 如何使用 Java 8 中的 lambda 和流检查整数类型的所有元素是否在给定范围内?

java - Intellij 自动构建 - 不存在

java 8 parallelStream() 和 sorted()

java - 使用 map().reduce() 初始化链表节点

java - 使用java流获取arrayList中最小大小列表的索引