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

如何消除Java流上的Sonar问题“重构代码以便使用此流管道”

孔城
2023-03-14

我正在从事一个项目(Java 17),其中我有一个对象列表,其中有两个属性,actionId(字符串)和right(布尔值)。我正在尝试获取right=true的对象的actionId,并将结果存储为字符串列表。

这是我的代码:

 List<String> usserValidActionsArray = userActionGatewayDTO.stream().filter(UserActionGatewayDTO::getRight)
      .map(UserActionGatewayDTO::getActionId).toList();

我的代码工作正常,但声纳说:

重构代码以便使用此流管道

有人能建议我如何改进代码以使其符合要求吗?


共有1个答案

诸葛雅达
2023-03-14

我猜那个声纳不知道水流。toList()(在Java 16中引入),并认为这是一个非终端操作。这似乎是bug SONAR-3746(另请参阅Stream#toList(JDK 16)未被识别为终端操作员)。该问题应在Sonarint 7.2中解决。

我想,这意味着您需要SonarQube 9或更高版本,因为SonarQube 9.0是宣布支持Java 16的第一个版本,SonarQube 9.1提到为Java 16添加新规则。然而,我不太熟悉Sonarint和SonarQube更新是如何以这种方式交互的。

作为一种解决方法,您可以将toList()替换为收集(Collectors.toList())

 类似资料:
  • 我使用了一种基于流的方法来映射并减少我的

  • hm包含员工的姓名和年龄。如何找到所有员工的姓名 我试过这样做 任何人都可以纠正我吗?

  • 你好,我正在使用以下函数将数据集中的所有分类值转换为数字,但我想将其转换为使用OneHotEncoder,如何做到这一点? 谢谢

  • 问题内容: 我有很多实现此接口的枚举: 一个典型的例子是: 可以想象,这些方法在CodableEnum的所有实现中实际上是相同的。我想消除这种重复,但坦率地说不知道如何做。我尝试使用如下类: 但这实际上是没有用的,因为: 枚举不能扩展类 枚举的元素(SKYPE,GOOGLE_TALK等)无法扩展类 我无法提供getByCode()的默认实现,因为DefaultCodableEnum本身不是枚举。我

  • 我这么叫它: 我有什么方法可以重构我的方法,以便我可以像这样调用它(只有1λ):

  • 背景:我写了一个简单的spark结构化蒸app,把数据从Kafka搬到S3。我发现,为了支持一次准确的保证,spark创建了_spark_metadata文件夹,但该文件夹最终变得太大,当流应用程序运行很长时间时,元数据文件夹变得太大,以至于我们开始出现OOM错误。我想摆脱Spark结构化流的元数据和检查点文件夹,自己管理偏移量。 我们如何管理Spark Streaming中的偏移量:我使用了va