我有一个代码,可以从List和Map输出数据。如何将相应的数字相乘?
List
的输出{prepare=0.25, saturday=0.5, republic=0.25, approach=0.25, ...}
Map的输出
[0, 1, 0, 0,...]
我需要将它们与相应的数字相乘并总结它们。 总计将是我想要的输出,如下所示:
(0.25*0)+(0.5*1)+(0.25*0)+(0.25*0).... = total
这是我的示例代码:
import java.util.*;
import java.util.stream.Collectors;
class WordOcc {
public static void main(String[] args) {
String someText = "hurricane gilbert head dominican coast saturday. hurricane gilbert sweep dominican republic sunday civil prepare high wind heavy rain high sea. storm approach southeast sustain wind mph mph. there alarm civil defense director a television alert shortly midnight saturday.";
List<List<String>> sort = new ArrayList<>();
Map<String, ArrayList<Integer>> res = new HashMap<>();
for (String sentence : someText.split("[.?!]\\s*"))
{
sort.add(Arrays.asList(sentence.split("[ ,;:]+"))); //put each sentences in list
}
// put all word in a hashmap with 0 count initialized
int sentenceCount = sort.size();
for (List<String> sentence: sort) {
sentence.stream().forEach(x -> res.put(x, new ArrayList<Integer>(Collections.nCopies(sentenceCount, 0))));
}
int index = 0;
// count the occurrences of each word for each sentence.
for (List<String> sentence: sort) {
for (String q : sentence) {
res.get(q).set(index, res.get(q).get(index) + 1);
}
index++;
}
Map<String,Float>word0List = getFrequency(res);
System.out.println(word0List + "\n"); //print the list value
//get first sentence count value from each word
List<Integer> sentence0List = getSentence(0, res);
System.out.println(sentence0List + "\n"); //print the map value
}
static List<Integer> getSentence(int sentence, Map<String, ArrayList<Integer>> map) {
return map.entrySet().stream().map(e -> e.getValue().get(sentence)).collect(Collectors.toList());
}
static Map<String, Float> getFrequency(Map<String, ArrayList<Integer>> stringMap) {
Map<String, Float> res = new HashMap<>();
stringMap.entrySet().stream().forEach(e -> res.put(e.getKey(), e.getValue().stream().mapToInt(Integer::intValue).sum() / (float)e.getValue().size()));
return res;
}
}
感谢您的任何帮助。谢谢!
答案 0 :(得分:1)
我不确定这是否是您正在寻找的东西,因为评论中提到的散列图没有任何顺序。但正如你所描述的,你想做这样的事情:
float result = 0;
Float[] hmValues = word0List.values().toArray(new Float[0]);
for(int i = 0; i < word0List.size(); i++)
result += hmValues[i] * sentence0List.get(i);