我正在尝试Java 8 stream((API来执行一些操作,但无法实现所需的输出。
只更新现有列表,我不想返回更新后的列表。请检查下面的查询以及我正在尝试的内容。
-
我想为没有分配id的学生分配id,即,对于该对象,id为null或空白。所以我只想执行这个操作,不想得到任何回报,下面是我正在尝试的,但我不知道如何在不返回更新列表的情况下停止这个操作。
students.stream().filter(StringUtils.isNullOrBlank(s->s.getId())).map(e-> e.setId(randomNum++))
-
另一个问题是,我想获得id更新的学生姓名列表。我正在尝试以下两种不同的操作,但我们能在一种操作中完成吗?
List<Student> studList = employees.stream().filter(StringUtils.isNullOrBlank(s->s.getId())).map(e-> e.setId(randomNum++)).collect(Collectors.toList()); List<String> names = studList.stream().map(s->s.getName()).collect(Collectors.toList());
如果您想使用Stream
并且不关心收集结果,那么您可以使用诸如forEach()
之类的终端操作(与从Iterable
继承的Collection
上的forEach
方法非常相似(:
students.stream()
.filter(StringUtils.isNullOrBlank(s->s.getId()))
.forEach(e-> e.setId(randomNum++));
然而,如果你想收集一些关于这些学生的信息,那么你可以使用peek
来运行一个副作用:
List<String> names = students.stream()
.filter(StringUtils.isNullOrBlank(s->s.getId()))
.peek(e-> e.setId(randomNum++))
.map(Student::getName)
.collect(Collectors.toList());
这将为每个无身份证的学生设置一个ID,并返回这些学生的姓名列表。