对大量字符串和分组进行排序

时间:2017-04-06 23:18:03

标签: algorithm sorting collections grouping

我正在尝试找到一组独特的字符串,并按标准将其分解为不相交的组:如果两个字符串在1列或更多列中重合,则它属于一个组。

例如

111;123;222
200;123;100
300;;100

所有这些都属于一个群体,导致重叠:

  • 第一个字符串,第二个字符串为“123”值
  • 第二个字符串,第三个字符串为“100”值

获取这些组后,我需要将它们保存到文本文件中。 我得到了带有字符串的60 MB文件,应该进行排序。(时间限制:30秒)

我想。首先,最好的方法是将字符串分成列,然后尝试找出任何巧合,但我完全不确定。

请帮我找到解决方案。

现在,我有这个代码;它的工作时间约为2.5-3秒:

// getting from file
        File file = new File(path);
        InputStream inputFS = new FileInputStream(file);
        BufferedReader br = new BufferedReader(new InputStreamReader(inputFS));
        List<String> inputList = br.lines().collect(Collectors.toList());
        br.close();

        List<String> firstValues = new ArrayList<>();
        List<String> secondValues = new ArrayList<>();
        List<String> thirdValues = new ArrayList<>();

        // extracting distinct values and splitting
        final String qq = "\"";


        inputList.stream()
                .map(s -> s.split(";"))
                .forEach(strings -> {
                    firstValues.add(strings.length > 0 ? strings[0].replaceAll(qq, "") : null);
                    secondValues.add(strings.length > 1 ? strings[1].replaceAll(qq, "") : null);
                    thirdValues.add(strings.length > 2 ? strings[2].replaceAll(qq, "") : null);
                });

// todo: add to maps by the row and then find groups

0 个答案:

没有答案