当前位置: 首页 > 面试题库 >

Java 8按字符串分组

臧弘和
2023-03-14
问题内容

这是我的代码:

public class StudentData {

    public static List<Student> getData() {

        return Arrays.asList(
            new Student(1, "a1", 1, Arrays.asList("cricket", "football", "basketball")),
            new Student(2, "a2", 1, Arrays.asList("chess", "football")),
            new Student(3, "a3", 2, Arrays.asList("running")),
            new Student(4, "a4", 2, Arrays.asList("throwball", "football")),
            new Student(5, "a5", 3, Arrays.asList("cricket", "basketball")),
            new Student(6, "a6", 4, Arrays.asList("cricket")), new Student(7, "a7", 5, Arrays.asList("basketball")),
            new Student(8, "a8", 6, Arrays.asList("football")),
            new Student(9, "a9", 8, Arrays.asList("tennis", "swimming")),
            new Student(10, "a10", 8, Arrays.asList("boxing", "running")),
            new Student(11, "a11", 9, Arrays.asList("cricket", "football")),
            new Student(12, "a12", 11, Arrays.asList("tennis", "shuttle")),
            new Student(13, "a13", 12, Arrays.asList("swimming"))
        );
    }

}

如何根据兴趣爱好对学生进行分组。我尝试下面的代码:

List<Student> data = StudentData.getData();
data.stream().collect(Collectors.groupingBy(s -> s.getHobbies().stream()));

它没有给出正确的答案。


问题答案:

基本上Stream,您需要一个由Pair(我AbstractMap.SimpleEntry在这里选择)的组件构成,该组件的左边部分为爱好,右边为学生(可以相反,这没关系)。

以后只需将其基于Hobby(根据您的情况为String)进行分组。

data.stream()
    .flatMap(student -> student.getHobbies().stream().map(hobby -> new SimpleEntry<>(hobby, student)))
    .collect(Collectors.groupingBy(
            Entry::getKey,
            Collectors.mapping(Entry::getValue, Collectors.toList())
));

Entry::getKey 作为获取键的方法引用,如果对您更有意义,也可以将其编写为lambda表达式:

Collectors.groupingBy(entry -> entry.getKey())


 类似资料:
  • 问题内容: 有没有办法在不知道字符串长度的情况下,将一个字符长的字符串切成4个字符串,每个字符长? 例如: 问题答案:

  • 这是我的代码: 如何根据爱好对学生进行分组。我尝试了以下代码: 它没有给出正确的答案。

  • 本文向大家介绍C#按特定字符分割字符串,包括了C#按特定字符分割字符串的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 我想通过分隔符将字符串分成两个字符串: 这意味着第一个字符串将包含之前的字符,第二个字符串将包括

  • 问题内容: 所以我有一个像这样的字符串 我想做的就是分割此字符串,以便得到以下信息: 的作为对所述第三元件是指示所述的单原子性质元件。相同。这实际上是我正在努力的部分。 这是一个化学方程式,因此我需要根据元素的名称和存在的原子数量等来分离元素。 问题答案: 您可以尝试这种方法: 输出: 原子:[C,3,H,20,I,1,O,1] 现在所有偶数索引(0、2、4 …)都是原子,奇数是关联的数字: 输出

  • 问题内容: 我想按索引列表来分割字符串,其中分割段以一个索引开始,然后在下一个索引之前结束。 例: 这将返回: 长字符串,我想分手 的字符串,我想分手了 ,我想分手 我想分手 我试图得到: 长 串 的是 我要分手 问题答案: 退货 您可以使用以下命令进行打印: 另一种可能性(不复制)是: