diff --git a/platform/util/src/com/intellij/util/containers/ContainerUtil.java b/platform/util/src/com/intellij/util/containers/ContainerUtil.java index 4c0a8fd7d828..9ac798932f25 100644 --- a/platform/util/src/com/intellij/util/containers/ContainerUtil.java +++ b/platform/util/src/com/intellij/util/containers/ContainerUtil.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.*; +import com.intellij.util.Function; import gnu.trove.*; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -1212,6 +1213,36 @@ public class ContainerUtil extends ContainerUtilRt { }; } + @NotNull + @Contract(pure=true) + public static Iterable> zip(@NotNull final Iterable iterable1, @NotNull final Iterable iterable2) { + return new Iterable>() { + @Override + public Iterator> iterator() { + return new Iterator>() { + private final Iterator i1 = iterable1.iterator(); + private final Iterator i2 = iterable2.iterator(); + + @Override + public boolean hasNext() { + return i1.hasNext() && i2.hasNext(); + } + + @Override + public Pair next() { + return Pair.create(i1.next(), i2.next()); + } + + @Override + public void remove() { + i1.remove(); + i2.remove(); + } + }; + } + }; + } + public static void swapElements(@NotNull List list, int index1, int index2) { E e1 = list.get(index1); E e2 = list.get(index2);