我正在尝试找到一组独特的字符串,并按标准将其分解为不相交的组:如果两个字符串在1列或更多列中重合,则它属于一个组。
例如
111;123;222
200;123;100
300;;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