【发布时间】:2019-11-29 04:40:01
【问题描述】:
我得到了 1000 个元素的对象的 Arraylist,我想创建 100 个。
如何在 java 8 中以某种优雅的方式做到这一点?
我有以下实体要迭代,其大小为 1000:
List<CustomerAgreement> customerAgreement
现在我将在上面调用以下方法
customerAgreementDao.createAll(customerAgreement);
customerAgreementDao.flush();
如何从上述实体创建批次并在该批次中调用上述两个方法?
目前的标准做法有点像:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<888888; i++ ) {
TableA record = new TableA();
record.setXXXX();
session.save(record)
if ( i % 50 == 0 ) {
session.flush();
session.clear();
}
}
tx.commit();
session.close();
【问题讨论】:
-
@MaartenBodewes:也更新了数据库的标签,但在这里我只是在寻找 Java 8 创建批次的方法。我认为这是数据库是其中之一的一般情况。谢谢
-
由于您正在执行终端操作并且您没有返回任何内容,在这种情况下您可以根据您的需要设计Consumer
-
我可以尝试制作一个。在此之前检查Stream#forEach(),这与您正在寻找的类似
-
@fatherazrael 这将是一种解决方法是的。毫无疑问,还有其他人,甚至可能包括 lambda,因为它们会试图向您展示。
-
我同意@MaartenBodewes。我唯一需要的是为您的代码参考提供一些花哨的、有缺陷的实现,这里是:
public void consumerTest() { AtomicInteger ai = new AtomicInteger(0); IntStream.range(0, 100).boxed().map(Table::new) .forEach(r -> this.forEachConsumer(r, ai.addAndGet(1))); } public void forEachConsumer(Table table, Integer counter) { System.out.println(counter); if (counter % 30 == 0) { System.err.println(counter); } },我不会在生产环境中推荐此代码
标签: java hibernate java-8 batch-insert