Java 为什么流peek在HashMap中不能正常工作 HashMap map=newhashmap(); //在这里初始化映射,在那里添加一些值 //使用“foreach”打印所有元素 map.entrySet().stream().foreach(System.out::println); //但当我使用“偷看”时,什么都没发生 map.entrySet().stream().peek(System.out::println);

Java 为什么流peek在HashMap中不能正常工作 HashMap map=newhashmap(); //在这里初始化映射,在那里添加一些值 //使用“foreach”打印所有元素 map.entrySet().stream().foreach(System.out::println); //但当我使用“偷看”时,什么都没发生 map.entrySet().stream().peek(System.out::println);,java,java-stream,Java,Java Stream,我的问题是:为什么peek不迭代流中的所有元素?peek是一个中间流操作,因此它会被延迟评估 您的管道没有终端操作,因此永远不会计算peek 如果添加一个终端操作,例如collect(Collectors.toList()),则执行终端操作所需的所有元素都将执行peek,在本例中,这恰好是流的所有元素 HashMap<Long, Double> map = new HashMap<>(); // here init map, add some values there

我的问题是:为什么
peek
不迭代流中的所有元素?

peek
是一个中间
操作,因此它会被延迟评估

您的管道没有终端操作,因此永远不会计算
peek

如果添加一个终端操作,例如
collect(Collectors.toList())
,则执行终端操作所需的所有元素都将执行
peek
,在本例中,这恰好是
流的所有元素

HashMap<Long, Double> map = new HashMap<>();
// here init map, add some values there

// with 'foreach' all elements are printed
map.entrySet().stream().foreach(System.out::println);

// but when I use 'peek' nothing happens
map.entrySet().stream().peek(System.out::println);
你可能还想看看
map.entrySet().stream().peek(System.out::println).collect(Collectors.toList());