关于现代java中java流实例的问题

关于现代java中java流实例的问题,java,java-8,java-stream,Java,Java 8,Java Stream,我现在正在阅读现代Java的实际应用。在溪流部分,有一件事我不清楚。 我们有以下清单: //public Dish(String name, boolean vegetarian, int calories, Type type) List<Dish> specialMenu = Arrays.asList( new Dish("seasonal fruit", true, 120, Dish.Type.OTHER), new Dish("prawns", false, 300,

我现在正在阅读现代Java的实际应用。在溪流部分,有一件事我不清楚。 我们有以下清单:

//public Dish(String name, boolean vegetarian, int calories, Type type)


List<Dish> specialMenu = Arrays.asList(
new Dish("seasonal fruit", true, 120, Dish.Type.OTHER),
new Dish("prawns", false, 300, Dish.Type.FISH),
new Dish("rice", true, 350, Dish.Type.OTHER),
new Dish("chicken", false, 400, Dish.Type.MEAT),
new Dish("french fries", true, 530, Dish.Type.OTHER));
//公共菜肴(字符串名称、布尔素食、整数卡路里、类型)
List specialMenu=Arrays.asList(
新菜(“季节性水果”,真的,120,菜型,其他),
新菜(“虾”,假,300,菜型,鱼),
新菜(“米饭”,真的,350,菜型,其他),
新菜(“鸡肉”,假,400,菜型,肉),
新菜(“炸薯条”,真的,530,Dish.Type.OTHER”);
然后我们用dropWhile来寻找超过320卡路里的元素

List <Dish> slicedMenu2 = specialMenu.stream()
 .dropWhile(dish -> dish.getCalories() < 320)
 .collect(toList());
List slicedMenu2=specialMenu.stream()
.dropWhile(dish->dish.getcarries()<320)
.collect(toList());
它说(引自书中)—— dropWhile操作是takeWhile的补充。它丢弃了元素 在谓词为false的开始处。一旦谓词的计算结果为true,则 停止并返回所有剩余元素(…)”

我认为,dropWhile在谓词为true时丢弃元素,当其计算结果为false时停止,但book声明相反。 我在这里没有得到什么?

看看:

如果此流已排序,则返回一个流,该流在删除与给定谓词匹配的元素的最长前缀后由该流的其余元素组成


您的理解是正确的,所以书中一定有错误。

我没有太多使用streams,但我理解的是,它将这些元素收集到大于320卡路里的slicedMenu2中,您想让我打开书解释一下吗?您检查了这个答案吗?是的,书上有个虫子,谢谢。我查看了这本书的论坛和勘误表,并没有发现任何关于这方面的信息,所以我想也许我不明白什么。