Skip to content

Commit 431cea8

Browse files
authored
Fix TreeMultimap Java map conversion (#3132)
The Java conversion of `TreeMultimap` did not preserve the original comparator, resulting in incorrect key ordering
1 parent 1edd6ea commit 431cea8

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

vavr/src/main/java/io/vavr/collection/TreeMultimap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,6 @@ public SortedSet<K> keySet() {
954954

955955
@Override
956956
public java.util.SortedMap<K, Collection<V>> toJavaMap() {
957-
return toJavaMap(new java.util.TreeMap<>());
957+
return toJavaMap(new java.util.TreeMap<>(comparator()));
958958
}
959959
}

vavr/src/test/java/io/vavr/collection/TreeMultimapTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
import java.math.BigDecimal;
55
import java.util.ArrayList;
66
import java.util.Comparator;
7+
import java.util.LinkedList;
78
import java.util.Map;
89
import java.util.Spliterator;
910
import java.util.function.Function;
1011
import java.util.function.Supplier;
1112
import java.util.stream.Collector;
1213
import java.util.stream.Stream;
14+
import org.assertj.core.api.Assertions;
1315
import org.junit.jupiter.api.TestTemplate;
1416

1517
public class TreeMultimapTest extends AbstractMultimapTest {
@@ -196,6 +198,21 @@ protected <K extends Comparable<K>, V> Multimap<K, V> mapFill(int n, Tuple2<? ex
196198
throw new RuntimeException();
197199
}
198200
}
201+
202+
// -- toJavaMap
203+
204+
@TestTemplate
205+
public void shouldReturnJavaMapSortedUsingSameComparator() {
206+
final TreeMultimap<String, String> vavrMap = TreeMultimap.withSeq().of(Comparator.comparing(String::length), "aa", "aa", "b", "b");
207+
208+
final LinkedList<String> orderedJavaMapKeys = new LinkedList<>();
209+
final LinkedList<String> orderedVavrMapKeys = new LinkedList<>();
210+
vavrMap.forEach((k,v) -> orderedVavrMapKeys.add(k));
211+
vavrMap.toJavaMap().forEach((k, v) -> orderedJavaMapKeys.add(k));
212+
213+
Assertions.assertThat(orderedJavaMapKeys).containsExactly("b", "aa");
214+
Assertions.assertThat(orderedVavrMapKeys).containsExactly("b", "aa");
215+
}
199216

200217
// -- static narrow
201218

0 commit comments

Comments
 (0)