当前位置: 首页 > 面试题库 >

Java 8 Lambda Stream forEach具有多个语句

慕志泽
2023-03-14
问题内容

我仍在学习Lambda,请原谅我做错了什么

final Long tempId = 12345L;
List<Entry> updatedEntries = new LinkedList<>();

for (Entry entry : entryList) {
    entry.setTempId(tempId);
    updatedEntries.add(entityManager.update(entry, entry.getId()));
}

//entryList.stream().forEach(entry -> entry.setTempId(tempId));

似乎forEach只能对一条语句执行。它不返回更新的流或函数以进行进一步处理。我可能总共选错了一个。

有人可以指导我如何有效地做到这一点吗?

还有一个问题,

public void doSomething() throws Exception {
    for(Entry entry: entryList){
        if(entry.getA() == null){
            printA() throws Exception;
        }
        if(entry.getB() == null){
            printB() throws Exception;
        }
        if(entry.getC() == null){
            printC() throws Exception;
        }
    }
}
    //entryList.stream().filter(entry -> entry.getA() == null).forEach(entry -> printA()); something like this?

如何将其转换为Lambda表达式?


问题答案:

忘记与第一个代码段相关。我根本不会用forEach。由于您将的元素收集Stream到中List,因此以结束Stream处理会更有意义collect。然后,您将需要peek设置ID。

List<Entry> updatedEntries = 
    entryList.stream()
             .peek(e -> e.setTempId(tempId))
             .collect (Collectors.toList());

对于第二个代码段,forEach可以执行多个表达式,就像任何lambda表达式都可以:

entryList.forEach(entry -> {
  if(entry.getA() == null){
    printA();
  }
  if(entry.getB() == null){
    printB();
  }
  if(entry.getC() == null){
    printC();
  }
});

但是,(请看您的评论尝试),在这种情况下您不能使用过滤器,因为entry.getA() == null如果您这样做,它只会处理某些条目(例如,针对的条目)。



 类似资料:
  • 问题内容: 我有一个变量。 我想呼应,如果等于任何下列值,,,,或。有没有办法通过像?? 这样的单个语句来做到这一点? 问题答案: 我认为,使用“ Or”代替“ And”会有所帮助

  • 问题内容: 有没有一种方法可以使用IN子句进行CASE语句? 问题答案: 是的。您需要使用表达式的“搜索”形式而不是“简单”形式

  • 我还在学习Lambda的过程中,如果我做错了什么,请原谅我 似乎只能对一条语句执行。它不会返回更新的流或函数来进一步处理。我可能选错了一个。 有人能指导我如何有效地做到这一点吗? 还有一个问题, 如何将其转换为Lambda表达式?

  • 问题内容: 我试图更新一个名为表,并设置为从表。 我在Postgres 9.3中有以下SQL查询,但是当它触发时,出现以下错误: 我更喜欢Active Record,所以我的SQL原始技能严重缺乏。我想知道是否有人可以帮助我向正确的方向指出如何正确执行此查询。 问题答案: 与Postgres中的有效语句相同: 您不能仅将子句中的表别名用作子句中的目标表。要更新的(一个!)表紧跟在关键字之后(如果我

  • 我正在尝试更新一个名为< code>incode_warrants的表,并将< code>warn_docket_no设置为< code>incode_violations表中的< code>viol_docket_no。 我在Postgres 9.3中有以下SQL查询,但当它触发时,我得到以下错误: 我更像是一个主动记录的人,所以我的原始SQL技能严重不足。我想知道是否有人可以帮助我指出正确的方

  • 问题内容: 对于我的工作,我必须开发一个小型Java应用程序,该应用程序可以解析非常大的XML文件(约30万行)以选择非常具体的数据(使用),因此我试图对其进行一些优化。我想知道这两个摘要之间哪个更好: 要么 其他详情: 这些if语句在循环内的每次迭代中执行(约20k次迭代) 的是一种在利用外部函数每次迭代计算 如果将设置为,则无需测试正则表达式是否匹配 谢谢你的帮助。 问题答案: 我遵循的一条黄