org.jooq.lambda.Seq:分组和groupBy函数的不同行为

时间:2018-02-14 12:50:00

标签: java enums functional-programming jooq

以下代码:

public class Application {
  public static void main(String[] args) {
    List<Foo> foos = Arrays.asList(
        new Foo().setStatus(StatusInfo.ORDER_PLACED).setOrderNo(1l),
        new Foo().setStatus(StatusInfo.ORDER_PLACED).setOrderNo(2l),
        new Foo().setStatus(StatusInfo.ORDER_PLACED).setOrderNo(3l),
        new Foo().setStatus(StatusInfo.ORDER_CANCELLED).setOrderNo(4l)
    );
    List<Tuple2<String, Seq<Foo>>> list1 = Seq.seq(foos).grouped(foo -> {
      System.out.println("Foo1: " + foo);
      return foo.getStatus().toString();
    }).toList();
    Map<String, List<Foo>> list2 = Seq.seq(foos).groupBy(foo -> {
      System.out.println("Foo2: " + foo);
      return foo.getStatus().toString();
    });

    System.out.println("Foos size: " + foos.size());
    System.out.println("Size 1: " + list1.size());
    System.out.println("Size 2: " + list2.size());
  }

  @Data
  static class Foo {
    StatusInfo status;
    Long orderNo;
  }

  public enum StatusInfo{
    ORDER_PLACED, ORDER_CANCELLED
  }
}

给出输出:

Foo1: Application.Foo(status=ORDER_PLACED, orderNo=1)
Foo1: Application.Foo(status=ORDER_PLACED, orderNo=2)
Foo1: Application.Foo(status=ORDER_PLACED, orderNo=3)
Foo2: Application.Foo(status=ORDER_PLACED, orderNo=1)
Foo2: Application.Foo(status=ORDER_PLACED, orderNo=2)
Foo2: Application.Foo(status=ORDER_PLACED, orderNo=3)
Foo2: Application.Foo(status=ORDER_CANCELLED, orderNo=4)
Foos size: 4
Size 1: 1
Size 2: 2

为什么groupBygrouped函数的结果不同?

1 个答案:

答案 0 :(得分:1)

jooq库中有一个错误。 这是修复:https://github.com/jOOQ/jOOL/issues/271

去年没有发布,所以此版本不在发行版中。如果有人需要,我构建了最新的master并部署到bintray:https://bintray.com/nikitapanteleev/jOOL/jOOL/0.9.13