当前位置: 首页 > 知识库问答 >
问题:

从列表中,创建另一组列表,其中包含重复的所有项目

姚德容
2023-03-14

我有个名单

l = ["a","z","c","c","a","e","e"]

我需要用java生成一组列表,如下所示

l1=["a"]
l2=["z"]
l3=["c","c"]
l4=["a"]
l5=["e","e"]

以下是我目前的代码

package test

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class test {

    public static void main(String[] args) {
        List<String> l =new ArrayList<>();
        List<List> ll =new ArrayList<>();
        List<String> nl;
        l.add("a");
        l.add("z");
        l.add("c");
        l.add("c");
        l.add("a");
        l.add("a");
        l.add("e");
        String prev="";
        nl = new ArrayList<>();
        for (String x : l){
            if(prev.equals(x))
            {
                nl.add(x);
            }
            else {
                if(!nl.isEmpty()) {
                    ll.add(nl);
                }
                else{
                List<String> nl1 = new ArrayList<>();
                nl1.add(x);
                ll.add(nl1);
                }
            }
            prev=x;
        }

        System.out.println(ll);
    }
}


输出

[[a], [z], [c], [c, a], [c, a]]

预期

[[a], [z], [c,c], [a,a], [e]]

共有1个答案

壤驷德寿
2023-03-14

通过对代码的一些小修改,下面的代码片段应该会给出disired结果:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {
        List<String> values = Arrays.asList("a","z","c","c","a","e","e");
        List<List<String>> result = new ArrayList<>();

        String previous = null;
        List<String> subList = new ArrayList<>();

        for (String value : values) {
            if (previous == null || value.equals(previous)) {
                subList.add(value);
            } else {
                result.add(subList);
                subList = new ArrayList<>();
                subList.add(value);
            }
            previous = value;
        }
        if (!subList.isEmpty()) {
            result.add(subList);
        }
        System.out.println(result);
    }
}

输出:

[[a], [z], [c, c], [a], [e, e]]

使用streams和AtomicReference的另一种方法:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;

public class Example {

    public static void main(String[] args) {
        List<String> input = Arrays.asList("a", "z", "c", "c", "a", "e", "e");

        AtomicReference<String> ar = new AtomicReference<>(input.get(0));
        AtomicInteger ai = new AtomicInteger();

        List<List<String>> result = new ArrayList<>(
                input.stream().collect(
                        Collectors.groupingBy(str -> str.equals(ar.getAndSet(str)) ? ai.get() : ai.incrementAndGet()))
                .values());
        System.out.println(result);
    }
}
 类似资料:
  • 我有一个列表,我想创建一个名为的扩展。 我不想覆盖,因此不能使用append、extend或insert。我想知道是否有一个快速的方法来完成这项工作(比使用理解列表或Deep.copy更快)

  • 问题内容: 这个问题已经在这里有了答案 : 循环“忘记”以删除一些项目[重复] (10个答案) 6年前关闭。 我想从列表“ a”中删除项目,其中列表“ b”包含在列表“ a”中找到带有单词的项目 结果应为: 这是因为在列表“ a”的项目中找到了单词“二”和“五六”。 这是我尝试解决的方法: 返回: 为什么这不起作用,如何解决此问题? 谢谢。 问题答案: 遍历列表时,请勿修改列表。这样做会产生不良的

  • 我正在从远程数据库读取一组行,从本地数据库读取一组类似的行,然后使用RemoveAll删除本地已经存在的远程行。。。 但这对我来说似乎不对。当我真正需要做的只是检查是否存在匹配项时,我认为我不应该计算事物。我尝试了和的各种用法,但得到了废话。我不能使用(如这里建议的),因为列表元素不是同一类型。 有更好的方法吗?

  • 问题内容: 我将如何使用python检查列表并删除所有重复项?我不需要指定重复项是什么- 我希望代码找出是否存在重复项,如果有则将其删除,每个重复项仅保留一个实例。如果列表中有多个重复项,它也必须起作用。 例如,在下面的代码中,列表lseparatedOrbList有12个项目-一项被重复六次,一项被重复五次,并且只有一个实例。我希望它更改列表,因此只有三项-每一项,并且它们之前出现的顺序相同。我

  • 我在数据库中有一个包含(id、日期、类别、行、持续时间)的表,我每天都有许多注册表,例如(1,12/12/2014,cat1,ligne1,12)(2,12/2014,cat2,ligne1,10)(3,12/12/2014,cat3,ligne2,23) (4,13/12/2014,cat1,LINGE1,10)(5,13/12/2014,cat2,LINGE1,20)(6,13/12/2014

  • 我有一个充满json对象的表。只有一列“数据”。 我想将这个表转换成一个包含json对象中所有键的多列的表。 例如, 现在我的桌子是这样的: 但我希望它是这样的: 我不想以这种方式查询它,我想以我上面展示的格式完全创建一个新表。 我可以试试跑步: 但由于我的json对象有数百列,这可能效率低下。有没有更有效的方法?感谢您的帮助或建议。