首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从arraylist中创建hashmap,其中包含重复值的一列是键,相应的行是值

如何从arraylist中创建hashmap,其中包含重复值的一列是键,相应的行是值
EN

Stack Overflow用户
提问于 2018-08-31 14:15:29
回答 1查看 84关注 0票数 1

我知道这是一个基本的问题,但由于某些原因,我无法在java中解决这个问题,尽管我在过去的几天里一直在尝试(寻找解决方案)……我有一个用制表符分隔的文件(超过8000行的大文件),它有多个列(其中几列元素之间有空格和":“).I读取了这个文件,并通过逐行读取文件将其存储为ArrayList

代码语言:javascript
复制
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

代码语言:javascript
复制
 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列的值捆绑行,类似于

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-31 14:45:16

你可以这样做:

代码语言:javascript
复制
// 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>>,可以很容易地将每个字符串数组中的字符串连接起来,并将它们放入一个新的映射中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52109495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档