java 8对类别中的第一个项目执行操作1,然后对类别中的所有项目执行操作2
给定类别列表以及类别中包含的项目列表java 8对类别中的第一个项目执行操作1,然后对类别中的所有项目执行操作2,java,java-stream,Java,Java Stream,给定类别列表以及类别中包含的项目列表 //Just example of structure: List<Category> categories = getCategories(); List<Item> items = category.getItems(); //结构示例: 列表类别=getCategories(); 列表项=category.getItems(); 使用Java流API,如何对类别中的第一个子项执行操作1(),然后对类别中的所有项执行操作2()
//Just example of structure:
List<Category> categories = getCategories();
List<Item> items = category.getItems();
//结构示例:
列表类别=getCategories();
列表项=category.getItems();
使用Java流API,如何对类别中的第一个子项执行操作1(),然后对类别中的所有项执行操作2()
我想用最干净的代码来做。所以我试着在一条流中完成,或者说什么是最好的方法呢?如果你坚持这样做,这就可以做到:
List<Category> categories = getCategories();
categories.forEach(category -> {
List<Item> items = category.getItems();
IntStream.range(0, items.size()).forEach(i -> {
Item item = items.get(i);
if (i == 0)
operation1(item);
operation2(item);
}
);
});
List categories=getCategories();
类别。forEach(类别->{
列表项=category.getItems();
IntStream.range(0,items.size()).forEach(i->{
Item=items.get(i);
如果(i==0)
操作1(项目);
操作2(项目);
}
);
});
但是,为了一般的可读性,我强烈建议只获取第一个元素(如果存在)并对其执行操作1,然后迭代其余元素(无论是否通过流)
这就是说,如果您实际上没有列表,但有真正的流式和非阻塞代码,那么对于这种方法有一些话要说。这也是为什么我没有在
.forEach
之前添加.stream()。使用AtomicBoolean
跟踪第一个元素是否已被处理
List<Category> categories = getCategories();
List<Item> items = category.getItems();
AtomicBoolean bool = new AtomicBoolean(true);
items.forEach(item -> {
if (bool.get()) {
bool.set(false);
operation1(item);
}
operation2(item);
});
List categories=getCategories();
列表项=category.getItems();
AtomicBoolean布尔=新的AtomicBoolean(真);
项目。forEach(项目->{
if(bool.get()){
bool.set(假);
操作1(项目);
}
操作2(项目);
});
我想用最干净的代码来做。所以我试着在一条流中做这件事:这些陈述是相互矛盾的。这里需要两个独立的操作。做第一个,不需要做任何迭代。第二个需要迭代。保持简单。即使对于第二个操作,也不需要流。您的意思是getCategories().stream().map(Category::getItems).forEach()
?getCategories()方法用于什么?它提供了分类。然后,您可以使用诸如getCategories().stream().map(Category::getItems).map(执行操作)之类的方法阅读问题(JB除外)。他不想对每件事都执行相同的操作。@Frederik我将你问题中的categories
重写为category
,因为我非常怀疑你试图调用java列表中的方法getItems()
。如果这是你的意图,请随时回复。