首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java8中,获取位于列表中间的一组行的最优化方法是什么?

在java8中,获取位于列表中间的一组行的最优化方法是什么?
EN

Stack Overflow用户
提问于 2018-09-24 17:20:33
回答 1查看 50关注 0票数 1

我有一份物品清单。我想要处理列表中间的一组项目。例如:假设员工列表的属性为id、名字、姓氏和中间名。我希望考虑lastName "xxx“和"yyy”之间的所有行,并进一步处理它们。如何在Java8中对此进行优化?优化是我首先关注的问题。已尝试使用Java8 streams和并行流。但是在Java8流中的foreach循环中不允许终止(Break)。此外,我们不能在foreach中使用外部变量(下面的“start”变量)。下面是我需要优化的代码:

代码语言:javascript
复制
boolean start = false;
for(Employee employee: employees) {
    if(employee.getLastname().equals("yyy")) {
        break;
    } 
    if(start) {
    // My code to process
    }
    if(employee.getLastname().equals("xxx")) {
        start = true;
    }
}

在Java8中处理上述问题的最佳方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-09-24 17:27:40

这在java-9 via中是可能的(我简化了您的示例):

代码语言:javascript
复制
Stream.of(1, 2, 3, 4, 5, 6)
            .dropWhile(x -> x != 2)
            .takeWhile(x -> x != 6)
            .skip(1)
            .forEach(System.out::println);

这将获得范围2 - 6中的值,即它将打印3,4,5

或者对于您的示例:

代码语言:javascript
复制
employees.stream()
         .dropWhile(e -> e.getLastname().equals("xxx"))
         .takeWhile(e -> e.getLastname().equals("yyy"))
         .skip(1)
         .forEach(....)

有用于dropWhiletakeWhile的后端口,请参阅herehere

编辑

或者,您可以先获取这些分隔符的索引,然后再获取subList (但这假设xxxyyy在雇员列表中是唯一的):

代码语言:javascript
复制
int[] indexes = IntStream.range(0, employees.size())
            .filter(x -> list.get(x).getLastname().equals("xxx") || list.get(x).getLastname().equals("yyy"))
            .toArray();

employees.subList(indexes[0] + 1, indexes[1])
            .forEach(System.out::println);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52476141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档