public static Map<String, List<DataNode>> getDataNodeGroups(final Collection<DataNode> dataNodes) {
        Map<String, List<DataNode>> result = new LinkedHashMap<>(dataNodes.size(), 1F);
        for (DataNode each : dataNodes) {
            result.computeIfAbsent(each.getDataSourceName(), unused -> new LinkedList<>()).add(each);
        }
        return result;
    }
@Test
    void assertGetDataNodeGroups() {
        Map<String, List<DataNode>> expected = new LinkedHashMap<>(2, 1F);
        expected.put("ds_0", Arrays.asList(new DataNode("ds_0.tbl_0"), new DataNode("ds_0.tbl_1")));
        expected.put("ds_1", Arrays.asList(new DataNode("ds_1.tbl_0"), new DataNode("ds_1.tbl_1")));
        List<DataNode> dataNodes = new LinkedList<>();
        expected.values().forEach(dataNodes::addAll);
        Map<String, List<DataNode>> actual = DataNodeUtils.getDataNodeGroups(dataNodes);
        assertThat(actual, is(expected));
    }