给出类别列表以及类别中包含的项目列表
//Just example of structure:
List<Category> categories = getCategories();
List<Item> items = category.getItems();
使用Java流API,您如何对类别中的第一个子项目执行Operation1(),然后对类别中的所有项目执行Operation2()?
我想用最干净的代码来做。因此,我尝试在一个流中执行此操作,或者最好的方法是什么?
答案 0 :(得分:1)
如果您坚持要这样做,那就可以了:
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);
}
);
});
但是,出于一般可读性考虑,我强烈建议您仅获取第一个元素(如果存在)并对其进行操作1,然后遍历其余元素(无论是否通过流)。
也就是说,如果您实际上没有列表开头,但是拥有真正的流式和非阻塞代码,那么这种方法就有些话了。这也是为什么我没有在类别的.stream()
之前添加.forEach
,而是从列表开始的原因。
答案 1 :(得分:0)
实际上没有干净的方法可以执行此操作,但是以下代码可以解决问题。使用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);
});