Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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_Algorithm_Sorting - Fatal编程技术网

Java 在列表中对数据进行分类

Java 在列表中对数据进行分类,java,algorithm,sorting,Java,Algorithm,Sorting,我这里有一个清单: List<String> container = new ArrayList<String>(); container.add("Book"); container.add("Paper"); container.add("Book"); container.add("Pen"); container.add("Pen"); container.add("Book"); List container=new ArrayList(); 容器。添加(“账

我这里有一个清单:

List<String> container = new ArrayList<String>();
container.add("Book");
container.add("Paper");
container.add("Book");
container.add("Pen");
container.add("Pen");
container.add("Book");
List container=new ArrayList();
容器。添加(“账簿”);
容器。添加(“纸张”);
容器。添加(“账簿”);
容器。添加(“笔”);
容器。添加(“笔”);
容器。添加(“账簿”);
如何将此列表中的数据分类为3个子列表,如下所示:

List <String> container1  ==>that still keep 3 elements which have the same name "Book"
List <String> container2  ==>that have 1 element which is "Paper"
List <String> container3  ==>that still keep 2 elements which have the same name "Pen"
List container1==>仍然保留3个同名“Book”的元素
列出包含1个元素(即“纸张”)的容器2==>
列出container3=>仍保留两个同名“Pen”的元素
谢谢你的帮助

如果有很多评论认为我的问题不清楚,那么我会这样问

如果我的列表中重复的元素比上面的示例列表多,那么子容器列表(如container1、container2…、containerN)将根据重复元素的数量生成


我该怎么做呢?

如果你不介意冗长,那么你可以用谷歌番石榴。这将允许您对给定的特定集合进行筛选

List<String> words = Lists
        .newArrayList("Book", "Paper", "Book", "Pen", "Paper", "Book");

FluentIterable<String> bookFiltered = FluentIterable
        .from(words)
        .filter(new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return "Book".equals(input);
    }
});

FluentIterable<String> paperFiltered = FluentIterable
        .from(words)
        .filter(new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return "Paper".equals(input);
    }
});

FluentIterable<String> penFiltered = FluentIterable
        .from(words)
        .filter(new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return "Pen".equals(input);
    }
});

System.out.println(bookFiltered); // [Book, Book, Book]
System.out.println(paperFiltered); // [Paper, Paper]
System.out.println(penFiltered); // [Pen]
List单词=列表
.newArrayList(“书”、“纸”、“书”、“笔”、“纸”、“书”);
FluentIterable bookFiltered=FluentIterable
.来自(文字)
.filter(新谓词(){
@凌驾
公共布尔应用(最终字符串输入){
返回“Book”。等于(输入);
}
});
可流动纸张过滤=可流动纸张
.来自(文字)
.filter(新谓词(){
@凌驾
公共布尔应用(最终字符串输入){
返回“纸张”。等于(输入);
}
});
FluentIterable penFiltered=FluentIterable
.来自(文字)
.filter(新谓词(){
@凌驾
公共布尔应用(最终字符串输入){
返回“笔”。等于(输入);
}
});
System.out.println(bookFiltered);//[书,书,书]
系统输出打印项次(纸质过滤);//[纸,纸]
System.out.println(penFiltered);//[笔]
这里有一个泛型,它可以对任意数量的重复元素以及正确覆盖
hashCode
等于
的任何类型的集合执行所需操作(例如,整数、字符串、双精度):

公共集合分类(集合容器){
映射列表=新的HashMap();
for(T元素:容器){
List elementList=lists.get(元素);
if(elementList==null){
elementList=新的ArrayList();
lists.put(元素、元素列表);
}
元素列表。添加(元素);
} 
返回lists.values();
}
示例用法:

Collection<List<String>> lists = classify(container);
System.out.println(lists);
收集列表=分类(容器);
System.out.println(列表);

您尝试过什么吗?您的要求不清楚。创建三个列表,并根据字符串比较将原始列表的引用复制到新列表?谢谢,但是如果列表中有N个重复的元素,该怎么办?它仍然会提供列表中所有重复的元素。这次手术没有删除任何重复的。谢谢你的帮助,明白了吗?尼克,我很高兴为你服务。如果你觉得Makoto或我的答案是正确的,请接受我们的答案之一。
Collection<List<String>> lists = classify(container);
System.out.println(lists);