作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个堆栈; Stack<String> file
和Stack<String[]>author
。它们具有一对一的关系,即
file author
file1 author3, author2 // file1 is written by author3 and author2
file2 author1, author2 // file2 is written by author1 and author2
我尝试创建新的数据结构(我认为 Map 是最好的)来包含成对的所有信息。例如;
new data structure
author1, file2
author2, file1, file2
author3, file1
为了创建这一对,我使用了 HashMap<String, Set<String> allInfo
,并将串联实现为;
int len = author.size();
for(int i = 0 ; i <len ; i ++ ){
String []temp = author.pop();
int len2 = temp.length();
for(int j = 0 ; j <len2 ; j ++ ){
if(allInfo.contains(temp[j]) == false){
Set<String> list = new HashSet<String>();
allInfo.put(temp[j], list);
}
Set<String> temp2 = allInfo.get(temp[j]);
temp2.add(file.pop());
}
}
但是,这个实现似乎很丑陋。我怎样才能更巧妙地创造这一对? (优先使用Java内置方法。)
最佳答案
下面的代码只是稍微好一点。有一些(非 JDK)库提供了一种称为 multimap 的数据结构,这更方便。但是您受困于两个堆栈以及关联的逆序,因此您需要一些编码工作。
while( ! author.empty() ){
String f = file.pop(); // Note that in your code this is in the wrong place
for( String aut: author.pop() ){
Set<String> files = allInfo.get( aut );
if( files == null ){
files = new HashSet<>();
allInfo.put( aut, files );
}
files.add( f );
}
}
关于java - 如何以巧妙的方式从两个堆栈创建对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25700949/
这适用于 ubuntu 16.04,但不适用于 17.10 + curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslog
我是一名优秀的程序员,十分优秀!