判断一个操作是惰性求值还是及早求值很简单:只需看它的返回值。如果返回值是 Stream,那么是惰性求值。其实可以这么理解,如果调用惰性求值方法,Stream 只是记录下了这个惰性求值方法的过程,并没有去计算,等到调用及早求值方法后,就连同前面的一系列惰性求值方法顺序进行计算,返回结果。
通用形式为:
Stream.惰性求值.惰性求值. ... .惰性求值.及早求值。
Stream是java.util.stream的一个类。
public class StudyStream { private List<HeroEntity> list; @Before public void init(){ list = new ArrayList<>(); list.add(new HeroEntity("影魔","敏捷")); list.add(new HeroEntity("QOP","智力")); list.add(new HeroEntity("德鲁伊","敏捷")); list.add(new HeroEntity("矮人狙击手","敏捷")); list.add(new HeroEntity("幻影刺客","敏捷")); list.add(new HeroEntity("撼地神牛","力量")); } @Test public void filterAGI() throws InterruptedException { /** * List对象调用stream()将会放回一个Stream<E>对象, * Steam对象调用filter(lambda表达式)会返回一个Steam对象, * Steam对象.collect(Collectors.toList())返回一个List<E> */ List<HeroEntity> listAGI = list.stream() .filter(l -> l.getProperty().equals("敏捷")) .collect(Collectors.toList()); listAGI.forEach(l -> System.out.println(l.toString())); } }