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

标签 java list lambda merge java-8

合并列表 [“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/

相关文章:

python - If-else 列表理解列表

java - 我如何用扫描仪读取 1,A,5,B 并在读取 Java 中的字符串和 int vector 时将其放入?

r - 比较两个 data.frames 列表中的 colname?

android - 如何将此 rxjava/rxkotlin flatMap 转换为 lambda 表达式?

java - 在 String.matches() 方法中转义句点时遇到问题

java - @RequestBody 在发出 POST 请求时给出空的 JsonObject

java - Spring 批处理 : How to create a Composite Item Writer?

java - java 中的堆空间要求 - Arrays.sort() 与 Collections.sort()

java - java 8中的方法引用?

python - Lambda 函数不返回正确的值