我知道这是一个基本的问题,但由于某些原因,我无法在java中解决这个问题,尽管我在过去的几天里一直在尝试(寻找解决方案)……我有一个用制表符分隔的文件(超过8000行的大文件),它有多个列(其中几列元素之间有空格和":“).I读取了这个文件,并通过逐行读取文件将其存储为ArrayList
String filepath = "/home/path/T1.csv";
ArrayList<String[]> listOfLines = new ArrayList<>();
ArrayList<String> column8 = new ArrayList <>();
Scanner scan = new Scanner(new File(filepath)) ;
while(scan.hasNextLine())
{String line = scan.nextLine();listOfLines.add(line.split("\\t+"));column8.add(line.split("\\t+"));}在第8列中,我有重复的值“是”、“否”和“可能”(几个大写字母和几个小写字母),并且必须创建一个HashMap (建议采用的替代方法),其中此列的值是关键字,并且与此关键字对应的整行是值i.e.one关键字多个值,因此最终结果是基于列8的公共条目“是、否和可能”来捆绑行。
输入文件具有此格式的行,并且某些地方的列数(以制表符分隔)超过8
1.456 Fri Jun 01 16:38:01 IST 2018 APB electron microscopy P5299 raw processed no
Incorrect Term. {"electron microscopy"}
1.5457 Fri Jun 01 12:16:03 IST 2018 JIAU Crystallography P1189 raw raw yes Term
too broad. {"Rietveld refinements"}
1.557 Fri Jun 01 12:16:03 IST 2018 JAU positron collider P72411 processed processed maybe
1.567 Fri Jun 01 12:16:04 IST 2018 JAU positron collider P72411 processed processed maybe我想要的结果是基于第8列的值捆绑行,类似于
yes bundle
1.5457 Fri Jun 01 12:16:03 IST 2018 JIAU Crystallography P1189 raw raw yes Term
too broad. {"Rietveld refinements"}
no bundle
1.456 Fri Jun 01 16:38:01 IST 2018 APB electron microscopy P5299 raw processed no
Incorrect Term. {"electron microscopy"}
maybe bundle
1.557 Fri Jun 01 12:16:03 IST 2018 JAU positron collider P72411 processed processed maybe
1.567 Fri Jun 01 12:16:04 IST 2018 JAU positron collider P72411 processed processed maybe发布于 2018-08-31 14:45:16
你可以这样做:
// toLowerCase for case insensitive comparison of column 8
listOfLines.forEach(x -> x[7] = x[7].toLowerCase(Locale.US));
Map<String, List<String[]>> map = listOfLines.stream()
.collect(Collectors.groupingBy(s -> s[7]));这会产生一个Map<String, List<String[]>>。如果需要Map<String, List<String>>,可以很容易地将每个字符串数组中的字符串连接起来,并将它们放入一个新的映射中。
https://stackoverflow.com/questions/52109495
复制相似问题