【发布时间】:2016-01-25 13:20:05
【问题描述】:
我有一个代码可以从 List 和 Map 中输出数据。如何将对应的数字相乘?
List 的输出
{prepare=0.25, saturday=0.5, republic=0.25, approach=0.25, ...}
地图的输出
[0, 1, 0, 0,...]
我需要让它们乘以相应的数字并求和。 total 将是我想要的输出,如下所示:
(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;
}
}
感谢您对此的任何帮助。谢谢!
【问题讨论】:
-
这还不清楚。你能解释一下当前代码在做什么,它应该做什么以及它做错了什么吗?
-
当前代码没有问题。我只是不确定如何将 List 和 Map 之间的值相乘。 list 和 map 的当前输出如前所述,我需要根据它们的位置将它们相乘。
-
注意:HashMap 没有内在的顺序,你也不应该期望它。
-
同一个词在一个句子中出现多次怎么办?
-
List 只会存储一个单词的实例。你可以在这里试试:repl.it/Bg6D/2
标签: java list dictionary