合并列表 [“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]
有解决这个问题的办法吗?提前致谢。 :)
最佳答案
更简单的解决方案是使用 Comparator.comparingInt
:
List<Object> result = Stream
.concat(list1.stream(), list2.stream())
.sorted(Comparator.comparingInt(
obj -> obj instanceof String ? 2 * ((String) obj).length() : 1 + 2 * (Integer) obj))
.collect(Collectors.toList());
关于java - 使用 Lambda 在 Java 中合并两个不同类型(字符串和整数)的排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31978615/