Replace streaming with ImmutableList building.

This is supposed to avoid some amount of short-lived garbage.
Also avoid flattening the nested set if we don't care about the actual size.

RELNOTES: None
PiperOrigin-RevId: 292512877
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetView.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetView.java
index 96ec012..216817a 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetView.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetView.java
@@ -13,7 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.lib.collect.nestedset;
 
-import static com.google.common.collect.ImmutableSet.toImmutableSet;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
@@ -101,10 +100,13 @@
     if (!(set instanceof Object[])) {
       return ImmutableSet.of();
     }
-    return Arrays.stream((Object[]) set)
-        .filter(c -> c instanceof Object[])
-        .map(c -> new NestedSetView<E>(c))
-        .collect(toImmutableSet());
+    ImmutableSet.Builder<NestedSetView<E>> nestedSetViewSetBuilder = new ImmutableSet.Builder<>();
+    for (Object c : (Object[]) set) {
+      if (c instanceof Object[]) {
+        nestedSetViewSetBuilder.add(new NestedSetView<>(c));
+      }
+    }
+    return nestedSetViewSetBuilder.build();
   }
 
   /**
@@ -118,9 +120,12 @@
     if (!(set instanceof Object[])) {
       return ImmutableSet.of((E) set);
     }
-    return Arrays.stream((Object[]) set)
-        .filter(c -> !(c instanceof Object[]))
-        .map(c -> (E) c)
-        .collect(toImmutableSet());
+    ImmutableSet.Builder<E> setBuilder = new ImmutableSet.Builder<>();
+    for (Object c : (Object[]) set) {
+      if (!(c instanceof Object[])) {
+        setBuilder.add((E) c);
+      }
+    }
+    return setBuilder.build();
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index 89ec541..a51d334 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -392,6 +392,10 @@
    */
   private static boolean evalInputsAsNestedSet(
       int nestedSetSizeThreshold, NestedSet<Artifact> inputs) {
+    if (nestedSetSizeThreshold == 1) {
+      // Don't even flatten in this case.
+      return true;
+    }
     return nestedSetSizeThreshold > 0
         && (inputs.memoizedFlattenAndGetSize() >= nestedSetSizeThreshold);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetKey.java
index 9a57788..a716922 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactNestedSetKey.java
@@ -15,14 +15,12 @@
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyKey;
-import java.util.Arrays;
 import java.util.Collections;
-import java.util.stream.Collectors;
 
 /** SkyKey for {@code NestedSet<Artifact>}. */
 public class ArtifactNestedSetKey implements SkyKey {
@@ -88,11 +86,15 @@
    */
   Iterable<Object> transitiveMembers() {
     if (!(rawChildren instanceof Object[])) {
-      return ImmutableSet.of();
+      return ImmutableList.of();
     }
-    return Arrays.stream((Object[]) rawChildren)
-        .filter(c -> c instanceof Object[])
-        .collect(Collectors.toList());
+    ImmutableList.Builder<Object> listBuilder = new ImmutableList.Builder<>();
+    for (Object c : (Object[]) rawChildren) {
+      if (c instanceof Object[]) {
+        listBuilder.add(c);
+      }
+    }
+    return listBuilder.build();
   }
 
   /**
@@ -107,9 +109,12 @@
     if (!(rawChildren instanceof Object[])) {
       return Collections.singletonList(Artifact.key((Artifact) rawChildren));
     }
-    return Arrays.stream((Object[]) rawChildren)
-        .filter(c -> !(c instanceof Object[]))
-        .map(c -> Artifact.key((Artifact) c))
-        .collect(Collectors.toList());
+    ImmutableList.Builder<SkyKey> listBuilder = new ImmutableList.Builder<>();
+    for (Object c : (Object[]) rawChildren) {
+      if (!(c instanceof Object[])) {
+        listBuilder.add(Artifact.key((Artifact) c));
+      }
+    }
+    return listBuilder.build();
   }
 }