0
我有一个代码将输出来自List和Map的数据。我如何将相应的数字相乘?来自List和Map的Java乘法值
从列表
{prepare=0.25, saturday=0.5, republic=0.25, approach=0.25, ...}
输出的输出从地图
[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;
}
}
欣赏任何帮助。谢谢!
这还不清楚。你能解释一下当前代码在做什么,它应该做什么以及它做错了什么? – Tunaki
当前代码没有问题。我只是不确定如何将List和Map之间的值相乘。列表和地图的当前输出如前所述,并且我需要将它们相互乘以对应于它们的位置。 – Cael
注意:一个HashMap没有固有的顺序,你也不应该期望一个。 –