仅使用 stream() 对退出列表执行操作,不返回任何集合对象



我正在尝试Java 8 stream((API来执行一些操作,但无法实现所需的输出。

只更新现有列表,我不想返回更新后的列表。请检查下面的查询以及我正在尝试的内容。

  1. 我想为没有分配id的学生分配id,即,对于该对象,id为null或空白。所以我只想执行这个操作,不想得到任何回报,下面是我正在尝试的,但我不知道如何在不返回更新列表的情况下停止这个操作。

    students.stream().filter(StringUtils.isNullOrBlank(s->s.getId())).map(e-> e.setId(randomNum++))
    
  2. 另一个问题是,我想获得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,并返回这些学生的姓名列表。

相关内容

  • 没有找到相关文章

最新更新