我有一个长度为4的大型数据集,int[]我想计算4个整数的每种特定组合出现的次数。这与计算文档中的单词频率非常相似。
int[]
我想创建一个Map<int[], double>将每个int []映射到正在运行的计数的列表,但是列表不使用原始类型。
Map<int[]
double>
int []
所以我做了 Map<Integer[], Double>
Map<Integer[], Double>
我的数据存储为一个,ArrayList<int[]>所以我的循环应该像
ArrayList<int[]>
ArrayList<int[]> data = ... // load a dataset` Map<Integer[], Double> frequencies = new HashMap<Integer[], Double>(); for(int[] q : data) { // **DO SOMETHING TO convert q from int[] to Integer[] so I can put it in the map if(frequencies.containsKey(q)) { frequencies.put(q, tfs.get(q) + p); } else { frequencies.put(q, p); } }
我不确定在注释中需要什么代码才能完成将转换int[]为的工作Integer[]。也许我从根本上对正确的方法感到困惑。
使用Java 8,int[]可以Integer[]轻松转换为:
Integer[]
int[] data = {1,2,3,4,5,6,7,8,9,10}; // To boxed array Integer[] what = Arrays.stream( data ).boxed().toArray( Integer[]::new ); Integer[] ever = IntStream.of( data ).boxed().toArray( Integer[]::new ); // To boxed list List<Integer> you = Arrays.stream( data ).boxed().collect( Collectors.toList() ); List<Integer> like = IntStream.of( data ).boxed().collect( Collectors.toList() );
正如其他人所述,Integer[]通常不是一个好的地图关键字。但是就转换而言,我们现在有了一个相对干净的本机代码。