public static boolean safeCollectionEquals(final Collection<Comparable<?>> sources, final Collection<Comparable<?>> targets) {
        List<Comparable<?>> all = new ArrayList<>(sources);
        all.addAll(targets);
        Optional<Class<?>> clazz = getTargetNumericType(all);
        if (!clazz.isPresent()) {
            return sources.equals(targets);
        }
        List<Comparable<?>> sourceClasses = sources.stream().map(each -> parseNumberByClazz(each.toString(), clazz.get())).collect(Collectors.toList());
        List<Comparable<?>> targetClasses = targets.stream().map(each -> parseNumberByClazz(each.toString(), clazz.get())).collect(Collectors.toList());
        return sourceClasses.equals(targetClasses);
    }
@Test
    void assertSafeCollectionEqualsForLong() {
        List<Comparable<?>> sources = Arrays.asList(10, 12);
        List<Comparable<?>> targets = Arrays.asList(10L, 12L);
        assertTrue(SafeNumberOperationUtils.safeCollectionEquals(sources, targets));
    }