Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表:根据重复项的数量对重复项进行分组并创建新列表_Java - Fatal编程技术网

Java 列表:根据重复项的数量对重复项进行分组并创建新列表

Java 列表:根据重复项的数量对重复项进行分组并创建新列表,java,Java,对不起,我太累了,现在想不出来(太长时间没有睡觉),项目的最后期限是在1小时内 我有一个这样的列表:{aaa,aaa,bbb,ccc,aaa,bbb,ccc,bbb}。 我需要按照以下方式准备myList: List<List<String>> myList = new ArrayList<List<String>>(); List myList=new ArrayList(); 根据副本的数量,将其呈现为单独的列表: {aaa,bbb} {c

对不起,我太累了,现在想不出来(太长时间没有睡觉),项目的最后期限是在1小时内

我有一个这样的列表:{aaa,aaa,bbb,ccc,aaa,bbb,ccc,bbb}。 我需要按照以下方式准备myList:

List<List<String>> myList = new ArrayList<List<String>>();
List myList=new ArrayList();
根据副本的数量,将其呈现为单独的列表: {aaa,bbb} {ccc}

这是我的代码:

int maxAnagramsNumber = 0;
Set<String> unique = new HashSet<String>(anagramLineList);

for (String key : unique) { //set max number of anagrams
    if (maxAnagramsNumber < Collections.frequency(anagramLineList, key)){
        maxAnagramsNumber = Collections.frequency(anagramLineList, key);
    }
}


int countedAnagrams = 0; 

for (int i=maxAnagramsNumber; i > 1; i--){ // group and make new list items acc.to number of duplicates

    for (String anagramUnit : unique){

        if(countedAnagrams != i && countedAnagrams != 0){
            anagramLineListSorted.add(anagramUnit);
        }
        countedAnagrams = i;
    }
    myList.add(anagramLineListSorted);
int-maxAnagramsNumber=0;
Set unique=新哈希集(anagramLineList);
对于(字符串键:唯一){//设置最大字谜数
if(maxAnagramsNumber1;i--){//根据重复项的数量分组并创建新的列表项
for(字符串anagramUnit:unique){
if(countedAnagrams!=i&&countedAnagrams!=0){
anagramlinelistsorded.add(anagramUnit);
}
countedAnagrams=i;
}
添加(anagramLineListSorted);

所有字谜都将具有相同的字符集。创建一个哈希图,将已排序的字符列表作为键,将实际字符串列表作为值。然后最后将所有值合并到一个列表中。试着想想如何做到这一点。如果您有困难,我可以提供一些代码

将原始字符串数组传递到此函数

代码

public List<String> anagrams(String[] strs) {
    ArrayList<String> result = new ArrayList<String>();
    if(strs == null || strs.length == 0)
        return result;

    HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
    for(int i=0; i<strs.length; i++){
        char[] arr = strs[i].toCharArray();
        Arrays.sort(arr);
        String t = String.valueOf(arr);
        if(map.get(t) == null){
            ArrayList<Integer> l = new ArrayList<Integer>();
            l.add(i);
            map.put(t, l);
        }else{
            map.get(t).add(i);
        }
    }

    for(ArrayList<Integer> l: map.values()){
        if(l.size() > 1){
            for(Integer i: l){
                result.add(strs[i]);
            }
        }
    }

    return result;
}
公共列表字谜(String[]strs){
ArrayList结果=新建ArrayList();
if(strs==null | | strs.length==0)
返回结果;
HashMap=newHashMap();
对于(int i=0;i 1){
for(整数i:l){
结果。添加(标准参考文献[i]);
}
}
}
返回结果;
}
如果你所需要的只是划分列表

ArrayList<String> result = new ArrayList<String>();

for(ArrayList<String> l : combined)
    for(String g : l)
        result.add(g);
ArrayList结果=新建ArrayList();
对于(ArrayList l:组合)
for(字符串g:l)
结果:添加(g);
现在,结果将把所有带有字谜的字符串组合在一起。

我还没有编译它(可能有一些语法问题)。但逻辑应该像你所期望的那样起作用

int maxAnagramsNumber = 0;
Set<String> unique = new HashSet<String>(anagramLineList);

Map<String, List<String>> ananas = new Map<String, List<Strin>>();

for (String ana:unique) {

    char[] chars = theWord.toCharArray();
    Arrays.sort(chars);
    String key = new String(chars);


    List<String> llist = ananas.get(key)
    if (llist == null) {
        llist = new List<String>()
        ananas.put(key, llist)
    } 
    llist.add(ana)
    }

    println(ananas);
int-maxAnagramsNumber=0;
Set unique=新哈希集(anagramLineList);
Map ananas=new Map();
for(字符串ana:unique){
char[]chars=theWord.toCharArray();
数组。排序(字符);
字符串键=新字符串(字符);
List llist=ananas.get(键)
if(llist==null){
llist=新列表()
ananas.put(key,llist)
} 
添加(ana)
}
println(ananas);

您遇到了什么问题?假设我的列表输出如下:{ccc,ccc}{ccc,ccc}{ccc,ccc}。。。我不知道如何区分正确的列表,更准确地说:一个GRAMLINELIST如下所示:[安第斯山脉,安第斯山脉,丹麦人,丹麦人,迪恩,迪恩,迪恩,邪恶,邪恶,邪恶,女孩,女孩,拉格,拉格,莱维,莱维,莱维,莱维,生活,生活,生活,生活,生活,轿车,轿车,轿车,熔渣,熔渣,街道,测试员,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱,面纱]…我不知道如何在我的列表中区分正确的列表:[邪恶,利维,生活,面纱,邪恶][安第斯山脉,丹麦,迪恩斯,塞丹][女孩,拉格,矿渣][街道,测试者][起义]不管怎样,我发现anagramLineList有错误…为什么不迭代组合列表并继续将组件添加到新列表中。这样,所有元素都将按顺序排列。如果发现答案有用,请向上投票/接受:)