Этот вопрос является продолжением этой темы :
Вкратце: для решения моей проблемы я хочу использовать Map<Set<String>, String>
.
Однако после сортировки записей данных в Excel удалите ненужные параметры, и получится следующее:
flow content ==> content content
flow content ==> content depth distance
flow content ==> content depth within
flow content ==> content depth within distance
flow content ==> content within
flow content ==> content within distance
У меня есть несколько уникальных ключей для hashmap, если это так. Как мне обойти это ... у кого-нибудь есть идеи?
Я думал о Map<Set <String>, List <String>>
, чтобы я мог сделать что-то вроде:
Set <flow content>, List <'content content','content depth distance','content depth within ', ..., 'content within distance'>
Но поскольку я построчно анализирую записи Я не могу понять, как сохранить значения одних и тех же повторяющихся ключей (содержимое потока) в одном списке и добавить его на карту .
Кто-нибудь имеет грубую логику о том, как это можно сделать в Java?
Заранее спасибо.
- EDIT:
Попытка Multimap, но почему-то есть небольшая проблема:
public static void main(String[] args) {
File file = new File("apriori.txt");
Multimap<Set <String>, String> mm = HashMultimap.create();
Set<String> s = null;
List l = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
//Regex delete only tokenize
String[] string = line.split(";");
System.out.println(string[0] + " " + string[1]);
StringTokenizer st = new StringTokenizer(string[0].trim());
while (st.hasMoreTokens()) {
//System.out.println(st.nextToken());
s = new HashSet<String>();
s.add(st.nextToken());
}
mm.put(s,string[1]);
}
// dispose all the resources after using them.
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Set<String> t = new HashSet<String>();
t.add("content");
t.add("by");
String str = mm.get(t).toString();
System.out.println(str);
for (Map.Entry<Set <String>, String> e : mm.entries()) {
System.out.println(e);
}
}
apriori.txt
byte_jump ; msg
byte_jump ; msg by
content ; msg
content by ; flow
content by ; msg
content by ; msg flow
content by byte_jump ; msg
content byte_jump ; by
content byte_jump ; msg
content byte_jump ; msg by
Видимо вывод для forloop:
[content]= msg
[by]= flow
[by]= msg
[by]= msg flow
[byte_jump]= msg
[byte_jump]= by
[byte_jump]= msg by
вместо [content by] = поток сообщений
Почему это так? Я пытался, и это работает. Но мне нужно Set для сравнения строк независимо от положения. Что я могу сделать?