public StringSetData combine(StringSetData other) {
    if (this.stringSet().isEmpty()) {
      return other;
    } else if (other.stringSet().isEmpty()) {
      return this;
    } else {
      ImmutableSet.Builder<String> combined = ImmutableSet.builder();
      combined.addAll(this.stringSet());
      combined.addAll(other.stringSet());
      return StringSetData.create(combined.build());
    }
  }
@Test
  public void testCombine() {
    StringSetData singleElement = StringSetData.create(ImmutableSet.of("ab"));
    StringSetData multipleElement = StringSetData.create(ImmutableSet.of("cd", "ef"));
    StringSetData result = singleElement.combine(multipleElement);
    assertEquals(result.stringSet(), ImmutableSet.of("cd", "ef", "ab"));

    // original sets in stringsetdata should have remained the same
    assertEquals(singleElement.stringSet(), ImmutableSet.of("ab"));
    assertEquals(multipleElement.stringSet(), ImmutableSet.of("cd", "ef"));
  }