diff --git a/vavr/src/main/java/io/vavr/Value.java b/vavr/src/main/java/io/vavr/Value.java index c9d996a451..5d6fbda2f3 100644 --- a/vavr/src/main/java/io/vavr/Value.java +++ b/vavr/src/main/java/io/vavr/Value.java @@ -416,6 +416,26 @@ default T getOrNull() { return isEmpty() ? null : get(); } + /** + * Maps the underlying value to another fixed value. + * + * @param value value to replace the contents with + * @param The new component type + * @return A new value + */ + default Value mapTo(U value) { + return map((ignored) -> value); + } + + /** + * Maps the underlying value to Void + * + * @return A new value of type Void + */ + default Value mapToVoid() { + return map((ignored) -> null); + } + /** * Checks if this {@code Value} is asynchronously (short: async) computed. *

diff --git a/vavr/src/main/java/io/vavr/collection/TreeSet.java b/vavr/src/main/java/io/vavr/collection/TreeSet.java index 0858151330..bcd08ba28f 100644 --- a/vavr/src/main/java/io/vavr/collection/TreeSet.java +++ b/vavr/src/main/java/io/vavr/collection/TreeSet.java @@ -1017,6 +1017,11 @@ public SortedSet zipWithIndex(BiFunction mapToVoid() { + return map((o1, o2) -> 0, ignored -> null); + } + // -- Object @Override diff --git a/vavr/src/test/java/io/vavr/AbstractValueTest.java b/vavr/src/test/java/io/vavr/AbstractValueTest.java index 8f2ba8caef..8442e593a6 100644 --- a/vavr/src/test/java/io/vavr/AbstractValueTest.java +++ b/vavr/src/test/java/io/vavr/AbstractValueTest.java @@ -218,6 +218,25 @@ public void shouldReturnValueWhenGetOrNullOfNonEmpty() { assertThat(of(1).getOrNull()).isEqualTo(1); } + // -- mapTo + + @TestTemplate + public void shouldExecuteMapToCorrectly() { + assertThat(empty().mapTo(1)).isEqualTo(empty().mapTo(2)); + assertThat(of(2).mapTo(1)).isEqualTo(of(3).mapTo(1)); + assertThat(of(2).mapTo(1)).isEqualTo(of(3).map(ignored -> 1)); + assertThat(of(3).mapTo(2)).isEqualTo(of(1).map(ignored -> 2)); + } + + // -- mapToVoid + + @TestTemplate + public void shouldExecuteMapToVoidCorrectly() { + assertThat(empty().mapToVoid()).isEqualTo(empty()); + assertThat(of(1).mapToVoid()).isEqualTo(of(1).mapTo(null)); + assertThat(of(1).mapToVoid()).isEqualTo(of(1).map(ignored -> null)); + } + // -- forEach @TestTemplate diff --git a/vavr/src/test/java/io/vavr/collection/BitSetTest.java b/vavr/src/test/java/io/vavr/collection/BitSetTest.java index 623c69f94b..57e669210c 100644 --- a/vavr/src/test/java/io/vavr/collection/BitSetTest.java +++ b/vavr/src/test/java/io/vavr/collection/BitSetTest.java @@ -565,6 +565,13 @@ public void shouldReturnTailOfNonEmptyHavingReversedOrder() { // BitSet can't have reverse order } + @Test + @Override + public void shouldExecuteMapToVoidCorrectly() { + assertThat(empty().mapToVoid()).isEqualTo(empty()); + assertThat(of(1).mapToVoid()).isEqualTo(of((Integer)null)); + } + // -- classes private static final class Mapper implements Serializable { diff --git a/vavr/src/test/java/io/vavr/collection/TreeSetTest.java b/vavr/src/test/java/io/vavr/collection/TreeSetTest.java index 75550ce33d..e57f32d3cc 100644 --- a/vavr/src/test/java/io/vavr/collection/TreeSetTest.java +++ b/vavr/src/test/java/io/vavr/collection/TreeSetTest.java @@ -411,4 +411,11 @@ public void shouldZipAllEmptyAndNonNil() { @Disabled public void shouldZipAllNonEmptyAndNil() { } + + @Test + @Override + public void shouldExecuteMapToVoidCorrectly() { + assertThat(empty().mapToVoid()).isEqualTo(empty()); + assertThat(of(1).map(ignored -> null)).isEqualTo(of(1).mapToVoid()); + } }