java创建映射<String,List<Integer>>
我正在尝试创建一个Map<String,List<Integer>>
。这里的挑战是,如果密钥不存在,则创建列表,否则使用当前密钥添加新整数以获得当前列表。
我做了一些非常接近的事情,但我不知道如何参考当前的地图来获得列表
List<String> strList = Arrays.asList(new String[]{"even","odd"});
List<Integer> intList = Arrays.asList(new Integer[]{1,2,3,4,5,6,7});
//This is what i want returned: Map<String, List<Integer>> myMap=null;
List<Map.Entry<String,Integer>> list = strList.stream().flatMap(s -> intList.stream()
.map(i -> Maps.immutableEntry(s,i))).collect(Collectors.toList());
这些值需要通过调用下面这样的函数来创建,该函数需要三个参数:当前键、值和当前列表
static public List<Integer> testFunc(String key, Integer i, List<Integer>list){
if(list == null){
list = new ArrayList();
}
list.add(i * key.hashCode());
return list;
}
# 1 楼答案
实现此行为的最简单方法是将^{} 与您自己的分类器一起使用:
# 2 楼答案
你的问题真的需要澄清。考虑到你迄今为止所说的一切,我的最佳猜测是,你有一个键列表,一个输入值(整数)列表一个函数,它接受一个键和一个输入整数,计算一个输出整数,并将结果整数按键添加到映射中的一个列表值
听起来testFunc必须能够执行各种操作,而不仅仅是“偶数”和“奇数”。听起来
intList
中的值可以在多个List
中使用,而不仅仅是划分成桶,所以在没有更好细节的情况下,我用我的想象力想象,它可能看起来像我在这里使用
Optional
,因为给定的整数i
可能不适用于给定的键。如果i
不适用于给定的密钥,则过滤器将Optional<Integer>
减少为Optional.empty()
下面的流将给定的键从
strList
直接映射到应用于它的整数列表。它通过考虑每个键来实现这一点,一次一个,并从intList中选择应用的值,并将它们收集到List
结果是
这就是你想要的结果吗
我一直在努力解决的问题之一是,您的“偶数”/“奇数”示例似乎对intList应用了一个谓词,只过滤偶数表示“偶数”,只过滤奇数表示“奇数”;而testFunc示例则为strList中的每个值从intList映射出一个值。如果testFunc确实需要映射值和筛选值,那么使用流很难做到这一点,因为
map()
和filter()
是独立的流操作。如果你对一个应用了filter()
的map()
进行map()
和filter()
的Optional
进行filter()
处理,这就是我在上面的例子中所做的,然后应用filter(Optional::isPresent)
过滤掉testFunc
中不符合布尔测试的内容,然后应用filter(Optional::get)
从Optional
包装器中打开Integer