为了账号安全,请及时绑定邮箱和手机立即绑定

Vavr - 将列表列表转换为单个列表

Vavr - 将列表列表转换为单个列表

斯蒂芬大帝 2022-06-04 17:06:20
我有两个 vavr 列表:List<Object> list1 = List.of("one", "two", "three", "for");List<Object> list2 = List.of("one", "two", List.of("three", "for"));如何将 转换list2为等于list1?编辑我试图解释更多我想要达到的目标:System.out.println("list1: " + list1);System.out.println("list2: " + list2);输出:list1: List(one, two, three, for)list2: List(one, two, List(three, for))我想展平 中的所有内部列表list2,因此展平的列表应等于list1:System.out.println("flattened: " + flattened);System.out.println(list1.equals(flattened));应该返回:flattened: List(one, two, three, for)true
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您可以使用Streamwith flatMap:


List<Object> flattened =

    list2.stream()

         .flatMap(e -> ((e instanceof List) ? ((List<Object>)e).stream() : Stream.of(e)))

         .collect(Collectors.toList());

System.out.println(flattened);

System.out.println(list1.equals(flattened));

输出:


[one, two, three, four]

true

编辑:


由于 OP 使用的是不同的List,这里有一个类似的解决方案io.vavr.collection.List:


List<Object> flattened =

    list2.toStream()

         .flatMap(e -> ((e instanceof List) ? ((List<Object>)e).toStream() : Stream.of(e)))

         .collect(List.collector());


查看完整回答
反对 回复 2022-06-04
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

使用 Vavr,您不需要 JDK 的所有流/收集样板:

List<Object> result = list2.flatMap(o -> o instanceof List ? ((List) o) : List.of(o));



查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信