Java 基于唯一值将列表拆分为子列表
我有一份清单:Java 基于唯一值将列表拆分为子列表,java,arraylist,java-8,classification,decision-tree,Java,Arraylist,Java 8,Classification,Decision Tree,我有一份清单: List,如果有人有这方面的经验,如果您能告诉我这是否是生成子列表的正确方法,我将不胜感激 谢谢。我建议创建一个HashMap,并将这些列表分组。然后只需调用map.values()即可获得集合 List List=new ArrayList(); 添加(Lists.newArrayList(“A”、“B”、“Y”)); 添加(Lists.newArrayList(“C”、“D”、“Z”); 添加(Lists.newArrayList(“A”、“D”、“X”)); 添加(List
List,如果有人有这方面的经验,如果您能告诉我这是否是生成子列表的正确方法,我将不胜感激
谢谢。我建议创建一个HashMap
,并将这些列表分组。然后只需调用map.values()
即可获得集合
List List=new ArrayList();
添加(Lists.newArrayList(“A”、“B”、“Y”));
添加(Lists.newArrayList(“C”、“D”、“Z”);
添加(Lists.newArrayList(“A”、“D”、“X”));
添加(Lists.newArrayList(“D”、“C”、“A”));
Map mapped=list.stream()
.collect(Collectors.groupingBy(li->li.get(1));
System.out.println(映射);
集合groupedList=mapped.values();
使用Java 8,您可以使用groupingBy
收集器:
Map<String, List<List<String>>> grouped = D.stream()
.collect(Collectors.groupingBy(list -> list.get(1)));
Collection<List<List<String>>> sublists = grouped.values();
Map group=D.stream()
.collect(Collectors.groupingBy(list->list.get(1));
集合子列表=分组的.values();
或者按照@AlexisC的建议:
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.groupingBy;
Collection<List<List<String>>> sublists = D.stream()
.collect(collectingAndThen(groupingBy(list -> list.get(1)), Map::values));
导入静态java.util.stream.Collectors.collectingAndThen;
导入静态java.util.stream.Collectors.groupingBy;
集合子列表=D.stream()
.collect(collectingAndThen(groupingBy(list->list.get(1)),Map::values));
。。或者Collection sublist=D.stream().collect(collectingAndThen(groupingBy(x->x.get(1)),Map::values))代码>虽然,在这种情况下,我怀疑与您所做的(如果您在collect
之后直接调用值)有很大的不同,但我猜,collecting然后
仅在生成的收集器
被传递到另一个化合物收集器
时才有用。否则,这只是对结果调用方法的一种更复杂的方式。
Map<String, List<List<String>>> grouped = D.stream()
.collect(Collectors.groupingBy(list -> list.get(1)));
Collection<List<List<String>>> sublists = grouped.values();
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.groupingBy;
Collection<List<List<String>>> sublists = D.stream()
.collect(collectingAndThen(groupingBy(list -> list.get(1)), Map::values));