使用Lambda合并Java中不同类型的两个排序列表(字符串和整数)

bgsudeep

合并列表[“ A”,“ XYZ”,“ AXTU”]和[2、4、6]

第一个列表按字长排序。如果第一个列表中的字符串长度与第二个列表中的数字相同,则首先出现的字符串应如下所示:

[“ A”,2,“ XYZ”,“ AXTU”,4、6]。

我这样尝试过:

Stream<String> stream = Stream.concat(list1.stream(), list2.stream().map(val -> Integer.toString(val)));
    System.out.println(stream.sorted().collect(Collectors.toList()));

输出是这样的:

[2,4,6,A,AXTU,XYZ]

有解决这个问题的主意吗?提前致谢。:)

梅拉莫克

由于混合类型,这有点令人费解,但是这是可以完全使用lambda完成的一种方法:

Stream<Object> stream = Stream.concat(list1.stream(), list2.stream());
System.out.println(stream.sorted((Object o1, Object o2) ->
    (o1 instanceof String ? 2*((String)o1).length() : 1+2*(Integer)o1)
    - (o2 instanceof String ? 2*((String)o2).length() : 1+2*(Integer)o2)
  ).collect(Collectors.toList()));

基本思想是定义一个lambda,它使用标准compareTo逻辑将长度(如果是字符串)与值(如果是整数)进行比较a - b但是,为了处理平局,我将所有值乘以2,然后1Integer值上添加了额外值。Integer如果是平局,这将导致最后排序。

演示:http : //ideone.com/39ppGD

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

排序列表中不同类型的字符串

如何使用 Java 8 合并两个不同类型的自定义对象列表

如何将列表中的整数和字符串元素分成两个不同的列表?

使用流比较并合并两个不同类型的列表

连接两个不同列表中的字符串

在相同类型的java中合并两个对象列表

在 C 中合并两个排序列表

使用lambda函数按两个子字符串对字符串列表进行排序

我想拆分字符串类型列表并将它们存储在android中的两个不同列表中

如何创建整数和字符串对的排序列表?

创建使用Java 8流API字符串和排序列表中的地图

如何在f#中将两个不同类型的序列合并为元组?

如何在js中为两个不同类型的数组列表使用相同的数组?

如何合并两个不同的字符串

Java REGEX,从字符串中删除两种不同类型的注释

在 Java 中合并两个排序列表,参考问题

如何使用Java中具有不同类的两个对象和具有compare字段的列表进行过滤

使用Java流将两个大小相同(类型不同)的列表合并到域对象列表中

如何在python中对列表中的两个列表路径的字符串进行排序?

使用 Perl 将两个不同的多行字符串合并为一个

使用 Java 中的 SimpleDateFormat 比较不同时区的两个日期字符串

如何合并两个流并返回不同类型的列表?

合并两个不同类型的相似结构

合并两个发出不同类型的Observable

合并两个不同类型的Ienumerable

如何合并两个不同类型的流RDD

在 C 中合并两个不同大小的字符串

用linq和lambda比较两个列表,其中一个是字符串,另一个是长整数

Python:比较具有两个不同列表长度的列表中的字符串