当前位置: 首页 > 知识库问答 >
问题:

如何以最有效的方式迭代列表并为其设置数据?

晏弘雅
2023-03-14

我正在研究一个问题,其中我需要迭代一个N大小的数组列表,并与另一个列表进行比较,并且对于所有匹配的元素,我需要在其中设置一些数据。下面给出了一个示例和我到目前为止所做的尝试。

List<Emp> emp= new ArrayList<>(); 
List<Student> stud = new ArrayList<>();
 
class Emp -> int id, String status, String name; 
class Student -> int id, String studStatus, String name;

如果学生的id和员工的id匹配,则使用一些默认值更新emp状态。

到目前为止,我尝试了这段代码,但它并不能帮助我获得所需的结果。纠正我在这里做错了什么?

  stud.stream().filter(i -> emp.stream().filter(j ->
 j.getId().equals(i.getId()))
                                .map(i -> i.setStatus(Status.PASS)));

共有1个答案

廉展鹏
2023-03-14

在您的代码中有几点需要注意:

  1. .filter应返回一个布尔值,以便对记录进行筛选。但在你的情况下,这是不可能的。您应该对内部筛选器输出进行计数,看看它是否大于0。或者,简化此操作并使用anymatch
  2. .map需要相同实体/类的响应。但是当您使用setter时,您返回的是void,因此您的setter并没有真正生效。使用其他自定义设置器返回更新的对象,或者使用代码块返回更新的对象。
  3. .map不是终端操作。因此,整个表达式甚至没有被执行。您可能需要像收集这样的终端操作,或者甚至只是一个计数来使轮子运动起来
  4. 您似乎使用了一个枚举来表示状态,但类似乎不是这样定义的...

如果你想让你的代码有修正..下面是你可以做的

    stud.stream()
        .filter(i -> emp.stream().filter(j -> j.getId() == i.getId()).count() > 0L) // ensure the outer filter is getting a boolean output
        .map(i -> {
            i.setStudStatus(Status.PASS);
            return i; // unless you return, the setter does not take effect
            })
        .count(); // terminal operation
    stud.stream()
        .filter(s -> {return emp.stream().anyMatch(e -> (e.id == s.id)); }) 
        .forEach(s -> s.setStatus(Status.PASS));
 类似资料:
  • 我们计划在网站上展示我们youtube频道的视频列表。我已经检查了V3 API,它运行良好。我遵循这个问题上指定的解决方案。 问题在于如何浏览这些年上传的视频列表。API将在单个请求中返回最多50个项目。我想给用户一个“加载更多”链接,这样他们就可以请求下一批(比如下50个)视频,按照上传日期的降序排列(最新的第一个)。在API调用允许的参数列表中,我找不到任何参数,如页码或跳过。

  • 假设我有3个要关闭的Scanner实例。 我可以做 对于每个扫描仪。 或者我可以做类似的事情 使用Java8有没有更简单的方法? 类似的东西?

  • 问题内容: 我有一个Python脚本,该脚本接受一个整数列表作为输入,我需要一次使用四个整数。不幸的是,我无法控制输入,或者将其作为四元素元组的列表传递。目前,我正在以这种方式对其进行迭代: 不过,它看起来很像“ C思维”,这使我怀疑还有一种处理这种情况的更Python的方法。列表在迭代后被丢弃,因此不需要保留。也许像这样会更好? 不过,还是不太“正确”。 问题答案: 从Python的iterto

  • 问题内容: 有一个对象,是否有比列表理解更快,更好或更正确的方法来获取迭代器返回的对象的列表? 问题答案:

  • 我通过在对象列表上进行流式处理来调用异步客户端方法。该方法返回Future。 迭代调用后返回的Futures列表的最佳方法是什么(以便处理那些首先出现的Future)? 注意:异步客户端只返回Future而不是CompletableFuture。 代码如下:

  • 我需要一些帮助,在一个月内找到低费用和高费用。我有一个费用列表,其中费用类别具有以下值。您能否指导我如何对它们进行分组以获得Java-8中的预期输出?提前谢谢你的帮助。 预期产出 我尝试按类型(杂货)进行分组,即