我有一组对象,很想批量插入。
首先,我想到了“ for-loops”,但是后来我意识到,这对于流来说应该可行。

BatchBindStep userLoginBatch = create
    .batch(
            create.insertInto(USERLOGIN, USERLOGIN.USERNAME, USERLOGIN.IP, USERLOGIN.MAC, USERLOGIN.LOGIN, USERLOGIN.STATUS, USERLOGIN.APPLICATION, USERLOGIN.ENTERTAINMENT_CREDENTIALS_ID, USERLOGIN.VERSION)
                    .values(null, null, null, (Timestamp) null, null, null, (Integer) null, null)
    );

userLoginsToPersist
  .stream()
  .map(login ->
        Arrays.asList(login.getUsername(), login.getIp(), login.getMac(), login.getLogin(), login.getStatus(), login.getApplication(), login.getEntertainmentCredentialsId(), login.getVersion())
  ).reduce(userLoginBatch, (a, b) -> a.bind(b));
userLoginBatch.execute();


这是我目前拥有的,并且抱怨无法减少该对象...

最佳答案

您需要使用reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)

userLoginsToPersist
  .stream()
  .map(login ->
        Arrays.asList(login.getUsername(), login.getIp(), login.getMac(), login.getLogin(), login.getStatus(), login.getApplication(), login.getEntertainmentCredentialsId(), login.getVersion())
  ).reduce(userLoginBatch, (b, v) -> b.bind(v), (b1, b2) -> b1)
  .execute();

09-25 21:26