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

流API。收集所有值​将模型类的字符串字段合并到一个集合中,然后打印

司空实
2023-03-14

//一个任务:有一个Model类,它有一个字段类型为String。有两个容器类。A类包含一个特定类型Model的对象列表和一个B类的字段。B类还包含一个对象列表Model。创建一个对象A的集合,填入它们的内部状态(列表,对象B),类似于B。将Model类的String字段的所有值收集到一个集合中,打印。这样写的:怎么写的更短?

public class Task_2 {

public static void main(String[] args) {

    List<Model> modelsForB = new ArrayList<>();
    modelsForB.add(new Model("B1 "));
    modelsForB.add(new Model("B2 "));
    B b = new B(modelsForB);

    List<Model> modelsForA = new ArrayList<>();
    modelsForA.add(new Model("A1 "));
    modelsForA.add(new Model("A2 "));
    A a = new A(modelsForA, b);

    final List<String> collected = new ArrayList<>();

    Stream.of(a)
            .flatMap(item -> Stream.of(item.b))
            .flatMap(itemB -> itemB.models.stream())
            .map(model -> model.string)
            .forEach(collected::add);

    Stream.of(a)
            .flatMap(itemA -> itemA.models.stream())
            .map(model -> model.string)
            .forEach(collected::add);
    collected.forEach(System.out::println);
}

static class Model {

    String string;

    public Model(String string) {
        this.string = string;
    }
}

static class A {

    private List<Model> models;
    B b;

    public A(List<Model> models, B b) {
        this.models = models;
        this.b = b;
    }
}

static class B {
    private List<Model> models;

    public B(List<Model> models) {
        this.models = models;
    }
}

怎么写短一点?

共有2个答案

李振国
2023-03-14

根据你的问题,你想“创建一个对象集合”,所以我会确保你的答案提供了这个,而不仅仅是一个A。

我还使用了数组。asList(用于添加的条目),只是为了简洁

public static void main(String[] args) {
    List<Model> modelsForB = new ArrayList<>();
    modelsForB.add(new Model("B1 "));
    modelsForB.add(new Model("B2 "));
    B b = new B(modelsForB);
    B b1 = new B(Arrays.asList( new Model("B1.1" ), new Model("B1.2" )));
    List<Model> modelsForA = new ArrayList<>();
    modelsForA.add(new Model("A1 "));
    modelsForA.add(new Model("A2 "));
    A a = new A(modelsForA, b);
    A a1 = new A(Arrays.asList( new Model("A1.1" ), new Model( "A1.2" )), b1 );
    List<A> listOfA = Arrays.asList( a, a1 );

    // If you need the collection, per the requirement, otherwise just use forEach to print instead of collect
    final List<String> collected = listOfA.stream()
            .flatMap( x -> Stream.concat( x.models.stream(), x.b.models.stream() ))
            .map(m -> m.string )
            .collect(Collectors.toList());
    collected.forEach(System.out::println);
}
孙海
2023-03-14

静态concat方法可用于该任务:

    List<String> collected = Stream
            .concat(a.models.stream(), a.b.models.stream())
            .map(model -> model.string)
            .collect(Collectors.toList());
 类似资料:
  • 问题内容: 我需要将单行的所有而不是空值放入一个字符串中,例如 表: 导致: 重要说明-我不知道字段名称/类型,因此它应该遍历所有字段,并且所有非null值都将添加到列表中。 看起来它可以使用xquery做到这一点,但找不到正确的语法。有什么提示吗? 谢谢! 问题答案: select T2.N.value(‘local-name(.)’, ‘nvarchar(128)’)+’: ‘+ T2.N.v

  • 第四章已经讲过一些字符串的内容,不过现在让我们更深入地了解它。字符串是新晋 Rustacean 们通常会被困住的领域,这是由于三方面内容的结合:Rust 倾向于确保暴露出可能的错误,字符串是比很多程序员所想象的要更为复杂的数据结构,以及 UTF-8。所有这些结合起来对于来自其他语言背景的程序员就可能显得很困难了。 字符串出现在集合章节的原因是,字符串是作为字节的集合外加一些方法实现的,当这些字节被

  • 虽然我在stackOverFlow MongoDB上发现了类似的问题,但使用外键将字段复制到另一个集合 我想将字段名称从集合中复制到集合中,其中userdetails中的userId等于user中的\u id。 用户集合 userDetail集合 这是我的问题: 此查询部分工作。它只更新文档,其中_id是字符串类型。_id为ObjectId的用户文档不会更新。

  • 从以下对象 其中 null 将是 我如何实现

  • userId是users集合中用户的_id字段。每个用户还有一个名字和一个电子邮件字段。 如何为ResearchThread.Pending.Collaborators对象数组中的每个用户将用户集合中的名称和电子邮件字段填充到此文档中?而且,当在模板中使用时,填充的数据会是反应性的吗?

  • 问题内容: 如何将一个JSON.stringify()一集? 在Chromium 43中不起作用的事情: 我希望得到类似于序列化数组的东西。 问题答案: 不能直接与集合一起使用,因为存储在集合中的数据不会存储为属性。 但是您可以将集合转换为数组。然后,您将能够正确地对其进行分类。 以下任何一项都可以解决问题: