如何删除这个 lamda 表达式周围的这些大括号?

问题描述 投票:0回答:1

我与 IntelliJ 一起使用的 Sonarlint 向我发送警告

S1602
删除语句周围无用的花括号”此语句:

communes.foreachPartition(
   partition -> {
      partition.forEachRemaining(commune -> this.validator.validerRowCommune(historique, commune));
   }
);

(其中:

communes
org.apache.spark.sql.Dataset<Row>

partition
Iterator<Row>

commune
Row
)

在下一个函数中:

public Dataset<Row> rowCommunes(OptionsCreationLecture optionsCreationLecture, HistoriqueExecution historique, int anneeCOG, boolean inclureCommunesDelegueesAssociees, Verification... verifications) {
   OptionsCreationLecture options = optionsCreationLecture != null ? optionsCreationLecture : optionsCreationLecture();

   if (historique != null) {
      historique.addReglesValidation(this.session, this.validator);
   }

   Supplier<Dataset<Row>> worker = () -> {
      super.setStageDescription(this.messageSource, "row.cog.libelle.long", "row.cog.libelle.court", anneeCOG, inclureCommunesDelegueesAssociees);
      LOGGER.info(this.messageSource.getMessage("row.cog.libelle.long", new Object[] {anneeCOG, inclureCommunesDelegueesAssociees}, Locale.getDefault()));

      // Lier les codes communes et codes communes parents à leurs siren
      Dataset<Row> c = this.cogCsvLoader.loadOpenData(anneeCOG, inclureCommunesDelegueesAssociees);
      Dataset<Row> s = this.datasetSirenCommunaux.rowSirenCommunes(options, new SirenCommunesTriDepartementCommuneSiren(), anneeCOG);
      Dataset<Row> communes = lierCommunesEtSiren(c,s).union(lierCommunesParentesEtSiren(c,s));

      communes = communes.dropDuplicates("codeCommune", "typeCommune", "nomCommune");

      communes = populationEtStrateCommunale(communes);
      communes = liercontoursCommunes(communes, anneeCOG, verifications);

      // Associer à chaque commune son code intercommunalité, si elle en a un (les communes-communautés peuvent ne pas en avoir).
      Dataset<Row> perimetres = this.datasetPerimetres.rowPerimetres(this.session, anneeCOG, EPCIPerimetreDataset.TriPerimetresEPCI.CODE_COMMUNE_MEMBRE).selectExpr("sirenCommuneMembre", "sirenGroupement as codeEPCI", "nomGroupement as nomEPCI");
      Column conditionJoinPerimetres = communes.col("sirenCommune").equalTo(perimetres.col("sirenCommuneMembre"));

      verificateur().verifications("jonction communes et périmètres", communes, null, perimetres, conditionJoinPerimetres, verifications, Verification.SHOW_REJETS, Verification.COMPTAGES_ET_STATISTIQUES);
      communes = communes.join(perimetres, conditionJoinPerimetres, "left");

      // Y associer les départements.
      communes = this.datasetDepartements.withDepartement("codeDepartementRetabli", communes, "codeDepartement", null, true, anneeCOG)
         .drop("codeRegionDepartement")
         .drop("codeDepartementRetabli");

      communes.foreachPartition(
         partition -> {
            partition.forEachRemaining(commune -> this.validator.validerRowCommune(historique, commune));
         }
      );

      return communes;
   };

   return constitutionStandard(options, worker,
      new CacheParqueteur<>(options, this.session,
         "cog-communes", "FILTRE-annee_{0,number,#0}_COMD-COMA_{1}",
         new CogTriDepartementCommune(), anneeCOG, inclureCommunesDelegueesAssociees));
}

我做了很多尝试,但没有找到移除这些牙套的方法。

例如,它不是:

communes.foreachPartition(
   partition -> partition.forEachRemaining(commune -> this.validator.validerRowCommune(historique, commune));
);
java lambda
1个回答
0
投票

您只能将 lambda 表达式的主体缩短为单个语句,如果:

  • lambda 主体仅由一个表达式组成
  • lambda 的预期返回值可以从表达式的返回值分配,或者为 void

显然你的第二个代码片段没有满足这些规则之一,或者你可能想投资一个新的 linter。

© www.soinside.com 2019 - 2024. All rights reserved.