我有两个堆栈; 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的内置方法是首选。)
答案 0 :(得分:2)
下面的代码只是更好一点。周围有(非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 );
}
}
答案 1 :(得分:0)
如何为您的问题设置自定义类型?
public class AuthorPublication{
private String authorName;
private Set<String> files;
//setters and getters
}