Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-54982

Using Java8 Streams evaluates whole expression to Boolean

      I'm trying to write a common library building Docker images from Dockerfile. I wrote a reusable global pipeline, where I'm iterating over Dockerfile lines. I tried to use Java 8 Streams, however I ended up with issue potentially related to JENKINS-26307 and JENKINS-42769, which is not related not to Groovy functional features, but Java 8 feature.

       An example code used:

      def getMissingLabels(Map<String, String> labels) {
       ['label1', 'label2', 'label3', 'label4'].stream()
              .filter({ label -> !isLabelDefined(label, labels) })
              .collect(Collectors.toList())
      }
      

      Whole stream execution results in "false" boolean result, instead of a list. Even complex streams are passing through, but evaluates to "false". When using more complex stream like:

       

      Arrays.stream(splitted)
                  .filter { it.startsWith('LABEL') }
                  .map { it.replaceAll('(LABEL)|"', '') }
                  .map { it.trim() }
                  .map { it.split('=', 2) }
                  .collect(Collectors.toMap(
                  { val -> val[0].toLowerCase() },
                  { val -> val[1] }))
      

      it enters only first filter expression and does not evaluate the rest.

      When replaced functional style code with typical imperative style (for loop) it works.

       

          [JENKINS-54982] Using Java8 Streams evaluates whole expression to Boolean

          Mateusz Filipowicz created issue -
          Devin Nusbaum made changes -
          Labels New: pipeline
          Devin Nusbaum made changes -
          Component/s New: workflow-cps-plugin [ 21713 ]
          Component/s Original: pipeline [ 21692 ]
          Devin Nusbaum made changes -
          Link New: This issue relates to JENKINS-26481 [ JENKINS-26481 ]
          Vivek Pandey made changes -
          Labels Original: pipeline New: pipeline pipeline-triaged
          Vivek Pandey made changes -
          Assignee New: Andrew Bayer [ abayer ]
          Andrew Bayer made changes -
          Assignee Original: Andrew Bayer [ abayer ]

            Unassigned Unassigned
            filipowm Mateusz Filipowicz
            Votes:
            3 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: