我知道这是一个基本问题,但是由于某些原因,尽管过去几天我一直在尝试和(寻找解决方案),但我仍无法在Java中解决此问题... 我有一个制表符分隔的文件(大于8000行的大文件),具有多列(这些列中的几个在其元素之间带有空格和“:”)。我已读取此文件,并通过逐行读取文件将其存储为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(建议使用其他方法)此列的是键,并且与该键对应的整行是值,即一个键的多个值,因此最终结果是根据第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
答案 0 :(得分:0)
您可以执行以下操作:
// 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>>
,则可以轻松地将每个字符串数组中的字符串连接起来,并将它们放入新的映射中。