public DistributionData combine(long value) {
    return create(sum() + value, count() + 1, Math.min(value, min()), Math.max(value, max()));
  }
@Test
  public void testCombine() {
    DistributionData data = DistributionData.create(5, 2, 1, 4).combine(7);
    assertEquals(12, data.sum());
    assertEquals(3, data.count());
    assertEquals(1, data.min());
    assertEquals(7, data.max());

    data = DistributionData.create(5, 2, 1, 4).combine(1, 2, 0, 1);
    assertEquals(6, data.sum());
    assertEquals(4, data.count());
    assertEquals(0, data.min());
    assertEquals(4, data.max());

    data = DistributionData.create(5, 2, 1, 4).combine(DistributionData.EMPTY);
    assertEquals(5, data.sum());
    assertEquals(2, data.count());
    assertEquals(1, data.min());
    assertEquals(4, data.max());
  }