gpt4 book ai didi

java - 使用流式 api 遍历字段而不是遍历对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:42 25 4
gpt4 key购买 nike

我想使用 Java 8 的流 api 进行以下练习:

  • 给定一个 List<Person> persons
  • Person是一个简单的 POJO,具有名称(字符串)和年龄(整数)属性
  • 构造以下字符串Names=[joe,diana,thomas]&Ages=[34,52,19]

我可以使用流轻松完成以下操作:

String result = persons.stream()
.map(p -> "(" + p.getName() + "," + p.getAge() + ")")
.collectors(Collectors.joining("&","persons=[","]");

这将给出 persons=[(joe,34)&(diana,52)&(thomas,19)] ,但我不知道如何连接多个人对象的字段,而不是单独连接每个人的属性。这就像我需要将人员平面映射到一个属性,然后为下一个属性再次平面映射人员列表,然后组合这些输出。语法是什么?

Person 类非常简单。如果可能的话,我想要一个以反射用于遍历类的所有字段而不是仅检查硬编码的“名称”和“年龄”字段的方式编写的解决方案。假设所有字段都是简单的属性,如 String 或 int(没有嵌套类或集合)。

最佳答案

我想有一个 Person 类(如您所描述的),为此您需要一个自定义收集器:

 String result = List.of(new Person(1, "david"), new Person(33, "eugene"))
.stream()
.parallel()
.collect(Collector.of(
() -> new StringJoiner[]{new StringJoiner(",", "[", "]"), new StringJoiner(",", "[", "]")},
(sj, per) -> {
sj[0] = sj[0].add("" + per.getAge());
sj[1] = sj[1].add(per.getName());
},
(left, right) -> {
left[0] = left[0].merge(right[0]);
left[1] = left[1].merge(right[1]);
return left;
},

x -> "Names = " + x[1].toString() + "&Ages = " + x[0].toString()
));

关于java - 使用流式 api 遍历字段而不是遍历对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com