小编Sad*_*nny的帖子

Java 8 lambda:迭代流对象并在流中使用上一个/下一个对象

我正在练习一些入门级的java 8 lambda功能.

给定一个消息列表,每个消息都包含一个消息偏移量,其中所有偏移量必须形成一个连续的整数列表,我试图找到间隙来警告.我觉得这一切都应该是一个很好的lambda.但我无法理解它.

所以,有这个工作片段:

private void warnAboutMessageGaps(final List<Message> messages) {

    final List<Long> offsets = messages.stream()
            .sorted(comparingLong(Message::getOffset))
            .map(Message::getOffset)
            .collect(toList())
            ;

    for (int i = 0; i < offsets.size() - 1; i++) {
        final long currentOffset = offsets.get(i);
        final long expectedNextOffset = offsets.get(i) + 1;
        final long actualNextOffset = offsets.get(i + 1);
        if (currentOffset != expectedNextOffset) {
            LOG.error("Missing offset(s) found in messages: missing from {} to {}", currentOffset + 1, actualNextOffset - 1);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是如何制作它以便我可以在lambda中进行"与上一个/下一个对象比较".任何指针将不胜感激.

/编辑:有关StreamEx和其他第三方解决方案的建议,虽然赞赏,但并不是我想要的.

java lambda java-8 java-stream

6
推荐指数
1
解决办法
3169
查看次数

Java QueryDsl是否为“更新myTable其中myColumn在('有趣','值')中”?

我正在尝试在QueryDsl中翻译此查询:

update myThings set firstColumn = 'newValue' where secondColumn in ('interesting', 'stuff')
Run Code Online (Sandbox Code Playgroud)

我花了数小时寻找文档,但是Java fu在这个文档中不够强大... :(我可以找到各种各样的QueryDsl示例,但是我找不到任何示例。我可能需要SimpleExpression.eqAny(CollectionExpression) ,但我不知道如何在简单的字符串列表中构建这样的CollectionExpression。

List<String> interestingValues = Arrays.asList("interesting", "stuff");

queryFactory.update(myThings)
    .set(myThings.firstColumn, "newValue")
//  .where(myThings.secondColumn.in(interestingValues)
//         'in' will probably try to look in table "interestingValues"?
//  .where(myThings.secondColumn.eqAny(interestingValues)
//         'eqAny' seems interesting, but doesn't accept a list
    .execute();
Run Code Online (Sandbox Code Playgroud)

我所能找到的只是API定义,但后来我迷上了泛型的任何其他“新” java概念,但我仍然很难理解。一个例子将不胜感激。

java querydsl

3
推荐指数
1
解决办法
3795
查看次数

标签 统计

java ×2

java-8 ×1

java-stream ×1

lambda ×1

querydsl ×1