NodeLabelUtil { public static boolean isNodeAttributesEquals( Set<NodeAttribute> leftNodeAttributes, Set<NodeAttribute> rightNodeAttributes) { if (leftNodeAttributes == null && rightNodeAttributes == null) { return true; } else if (leftNodeAttributes == null || rightNodeAttributes == null || leftNodeAttributes.size() != rightNodeAttributes.size()) { return false; } return leftNodeAttributes.stream() .allMatch(e -> isNodeAttributeIncludes(rightNodeAttributes, e)); } private  NodeLabelUtil(); static void checkAndThrowLabelName(String label); static void checkAndThrowAttributeName(String attributeName); static void checkAndThrowAttributeValue(String value); static void checkAndThrowAttributePrefix(String prefix); static void validateNodeAttributes(Set<NodeAttribute> attributeSet); static Set<NodeAttribute> filterAttributesByPrefix(
      Set<NodeAttribute> attributeSet, String prefix); static boolean isNodeAttributesEquals(
      Set<NodeAttribute> leftNodeAttributes,
      Set<NodeAttribute> rightNodeAttributes);  }
@Test public void testIsNodeAttributesEquals() { NodeAttribute nodeAttributeCK1V1 = NodeAttribute .newInstance(NodeAttribute.PREFIX_CENTRALIZED, "K1", NodeAttributeType.STRING, "V1"); NodeAttribute nodeAttributeCK1V1Copy = NodeAttribute .newInstance(NodeAttribute.PREFIX_CENTRALIZED, "K1", NodeAttributeType.STRING, "V1"); NodeAttribute nodeAttributeDK1V1 = NodeAttribute .newInstance(NodeAttribute.PREFIX_DISTRIBUTED, "K1", NodeAttributeType.STRING, "V1"); NodeAttribute nodeAttributeDK1V1Copy = NodeAttribute .newInstance(NodeAttribute.PREFIX_DISTRIBUTED, "K1", NodeAttributeType.STRING, "V1"); NodeAttribute nodeAttributeDK2V1 = NodeAttribute .newInstance(NodeAttribute.PREFIX_DISTRIBUTED, "K2", NodeAttributeType.STRING, "V1"); NodeAttribute nodeAttributeDK2V2 = NodeAttribute .newInstance(NodeAttribute.PREFIX_DISTRIBUTED, "K2", NodeAttributeType.STRING, "V2"); Assert.assertTrue(NodeLabelUtil.isNodeAttributesEquals(null, null)); Assert.assertTrue(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(), ImmutableSet.of())); Assert.assertTrue(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(nodeAttributeCK1V1), ImmutableSet.of(nodeAttributeCK1V1Copy))); Assert.assertTrue(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(nodeAttributeDK1V1), ImmutableSet.of(nodeAttributeDK1V1Copy))); Assert.assertTrue(NodeLabelUtil.isNodeAttributesEquals( ImmutableSet.of(nodeAttributeCK1V1, nodeAttributeDK1V1), ImmutableSet.of(nodeAttributeCK1V1Copy, nodeAttributeDK1V1Copy))); Assert.assertFalse( NodeLabelUtil.isNodeAttributesEquals(null, ImmutableSet.of())); Assert.assertFalse( NodeLabelUtil.isNodeAttributesEquals(ImmutableSet.of(), null)); Assert.assertFalse(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(nodeAttributeCK1V1), ImmutableSet.of(nodeAttributeDK1V1))); Assert.assertFalse(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(nodeAttributeDK1V1), ImmutableSet.of(nodeAttributeDK2V1))); Assert.assertFalse(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(nodeAttributeDK2V1), ImmutableSet.of(nodeAttributeDK2V2))); Assert.assertFalse(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(nodeAttributeCK1V1), ImmutableSet.of())); Assert.assertFalse(NodeLabelUtil .isNodeAttributesEquals(ImmutableSet.of(nodeAttributeCK1V1), ImmutableSet.of(nodeAttributeCK1V1, nodeAttributeDK1V1))); Assert.assertFalse(NodeLabelUtil.isNodeAttributesEquals( ImmutableSet.of(nodeAttributeCK1V1, nodeAttributeDK1V1), ImmutableSet.of(nodeAttributeDK1V1))); }