我有一个类似的列表:lst = {"a","b","c","b","c","a","c","a","b"}
我想把它分成几 block :
像第一个 block :a,b,c 第二个是:b,c,a 第三个是:c,a,b
请注意,这些 block 可以按任何顺序排列,并且不是简单的 String 对象,而是可以是任何东西(即:复杂对象、Map 等)。
此外,我不能盲目地分成 block ,因为每个 block 中的数据应该相同且相关数据即:在第一个 block 中 a、b、c 是相互关联的。同样在第二 block 中 b、c、a 是相互关联的,所以上。
我怎样才能做到这一点。
我想到的一种可能的方法是在 Java8 中使用收集器和组。
任何建议。
PS:请忽略语法,这只是为了理解目的。
注意:此处标记为重复的答案不适用。
最佳答案
如果没有一些中间映射对象,我认为不可能做到这一点。为了尝试一下,我想出了以下解决方案:
public class Try30 {
public static class StringIntPair {
public final int i;
public final String s;
public StringIntPair(int i, String s) {
this.i = i;
this.s = s;
}
}
public static void main(String[] args) {
List<String> in = Arrays.asList("a","b","c","b","c","a","c","a","b");
AtomicInteger cnt = new AtomicInteger(0);
Map<Integer, List<String>> res = in.stream()
.map(s -> new StringIntPair(cnt.getAndIncrement(), s))
.collect(Collectors.groupingBy(
p -> p.i / 3,
Collectors.mapping(p -> p.s, Collectors.toList())
));
System.out.println(res);
}
}
但是,在现实生活中,我宁愿采用经典的循环方法,因为这看起来非常复杂且极难理解。请不要忘记,即使在 Java 8 中,for 循环和 while 循环仍然是受支持且有值(value)的语言功能。
关于java - 对列表中的对象进行分组 java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39219511/