![txt文件示例] [1] http://dox.bg/files/dw?a=f49baaafee
! [实际上是什么数字] [2] http://dox.bg/files/dw?a=a911da0422
我有一个文本fle iot.txt,我在其中红色并将其数据存储在Map<String, HashMap<String, Integer>>
中。
正如您在文本文件中看到的那样,我们有一个确切的句号“2004-11-28 - 2004-12-04”然后是语言(Java,Python等),最后是一个整数(对这种语言感兴趣),是这些语言的价值。
如何循环多年,不提具体周。例如
通过 2004 进行迭代并获得最少的兴趣。通过 2006 进行迭代。另外,我有2004 - 2015年的年份,所以有没有快速的方法循环所有年份?
我想知道做那样的事情:
Map<String, HashMap<String, Integer>> everything = new HashMap<>();
HashMap<String, Integer> lang = new HashMap<>();
for(String yr: iot.keySet())
{
lang.put(yr, iot.get(yr).get("JavaScript").intValue());
everything.put(yr, lang);
for(String yr04 : iot.get("2004").keySet()) //this is where I have prob
{
int minValueInMap=(Collections.min(everything.values())); // there is smth wrong with "min"
if (entry.getValue()==minValueInMap) //entry cannot be resolved??
{
System.out.println(entry.getKey()); //entry cannot be resolved??
}
}
然而,由于我的按键分类如“2004-11-28 - 2004-12-04”,因此无法完成。
答案 0 :(得分:0)
Multimap
:将键映射到值的集合,类似于Map,但在其中 每个键可以与多个值相关联。你可以想象出来 multimap的内容,可以是从keys到非空的映射 价值集合:
a → 1, 2
和b → 3
如果您希望数据可以通过本机密钥和年份进行搜索,则必须将数据存储在两个地图中。
然后,当您在地图中添加完整日期的某些内容时,您还会将其放入Multimap
只有一年的时间。
Guava has something called a Multimap
that is perfect for this.
keySet()
比较。这将很快变得昂贵。如果您在构建其他地图时构建Multimap
,那么您可以非常快速地查找给定年份中的所有内容,只需使用一年的简单方法调用.get()
,您就可以获得回复匹配数据的List
或Set
取决于您选择的Multimap
的实现。
答案 1 :(得分:0)
我建议使用更好的数据结构来表示您的需求。但是,如果不能像下面那样扩展HashMap:
&#xA;&#xA; 公共类MyHashMap&lt; V&gt;扩展HashMap&lt; String,V&gt; {&#XA;&#XA; public Set&lt; String&gt; keysStartingWith(String s){&#xA;设置&LT;字符串&GT; result = new HashSet&lt; String&gt;();&#xA; for(String key:keySet()){&#xA; if(key.startsWith(s)){&#xA; result.add(键);&#XA; }&#XA; }&#XA;返回结果;&#xA; }&#xA;}&#xA;
&#xA;&#xA; 您可以使用:
&#xA;&#xA而不是使用地图> ; MyHashMap&lt; HashMap&lt; String,Integer&gt;&gt; myHashMap = new MyHashMap&lt;&gt;();&#xA; HashMap&lt; String,Integer&gt; data;&#xA; for(String yearRangeKey:myHashMap.keysStartingWith(“2014”){&#xA; data = myHashMap.get(yearRangeKey);&#xA; ...&#xA;}&#xA; < /代码>
&#XA;
答案 2 :(得分:0)
使用流:
Map<String, HashMap<String, Integer>> everything = new HashMap<>();
String year = "2004";
int minInterest2004 = everything.entrySet().stream()
.filter(e -> e.getKey().startsWith(year))
.mapToInt(e -> e.getValue().getInterest())
.min().getAsInt();