diff --git a/src/main/java/htsjdk/samtools/util/IntervalList.java b/src/main/java/htsjdk/samtools/util/IntervalList.java index 7b05d40d2d..bb4a10fe06 100644 --- a/src/main/java/htsjdk/samtools/util/IntervalList.java +++ b/src/main/java/htsjdk/samtools/util/IntervalList.java @@ -273,7 +273,7 @@ public static List getUniqueIntervals(final IntervalList list, final b } final List unique = new ArrayList<>(); - final TreeSet toBeMerged = new TreeSet<>(); + final List toBeMerged = new ArrayList<>(); Interval current = null; for (final Interval next : intervals) { @@ -383,11 +383,12 @@ private static List breakIntervalAtBandMultiples(final Interval interv /** * Merges a sorted collection of intervals and optionally concatenates unique names or takes the first name. */ - static Interval merge(final SortedSet intervals, final boolean concatenateNames) { - final String chrom = intervals.first().getContig(); - int start = intervals.first().getStart(); - int end = intervals.last().getEnd(); - final boolean neg = intervals.first().isNegativeStrand(); + static Interval merge(final Iterable intervals, final boolean concatenateNames) { + final Interval first = intervals.iterator().next(); + final String chrom = first.getContig(); + int start = first.getStart(); + int end = start; + final boolean neg = first.isNegativeStrand(); final LinkedHashSet names = new LinkedHashSet<>(); final String name; diff --git a/src/test/java/htsjdk/samtools/util/IntervalListTest.java b/src/test/java/htsjdk/samtools/util/IntervalListTest.java index e118f970b7..3ff230a00e 100644 --- a/src/test/java/htsjdk/samtools/util/IntervalListTest.java +++ b/src/test/java/htsjdk/samtools/util/IntervalListTest.java @@ -238,6 +238,21 @@ public void testUnionIntervalLists(final List lists, final Interva CollectionUtil.makeCollection(list.iterator())); } + + @Test + public void testUnionSamePosition() { + final IntervalList iList= new IntervalList(fileHeader); + + final List intervals = Arrays.asList( + new Interval("1", 2, 100, true, "test1"), + new Interval("1", 2, 100, true, "test2") + ); + iList.addall(intervals); + final List uniqued = iList.uniqued().getIntervals(); + Assert.assertEquals(uniqued.size(),1); + Assert.assertEquals(uniqued.get(0).getName(),"test1|test2"); + } + @DataProvider(name = "invertData") public Object[][] invertData() { final IntervalList invert1 = new IntervalList(fileHeader);