java - 用于反转字符串的 Lambda 表达式 - Java

标签 java arrays lambda java-8

String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", 
                  "Jupiter", "Saturn", "Uranus", "Neptune" };

我有一个简单的行星名称数组,我想反转添加到数组中的每个名称(不是字符串顺序)。
我继续与 lambda 语法作斗争:

Arrays.sort(planets, (first, second) -> new StringBuilder(first).reverse().toString());
System.out.println(Arrays.toString(planets));

目前我得到:

Multiple markers at this line

  • The method reverse() in the type StringBuilder is not applicable for the arguments (String)
  • Type mismatch: cannot convert from String to int

响应:

谢谢大家的建议...asList 让我很接近。我仍然没有正确排序。

所以我需要找到一种方法来使 array.sort 工作,因为这是分配(采用 array.sort 和 lambda 它)。

我已通过 ping 方式要求讲师在此处进行说明,但时间不多了。

这是我试图保持 array.sort 的工作

            // lambda expression , long to short
        System.out.println("5) Sorted by length (descending):");
        Arrays.sort(planets, (first, second) -> second.length() - first.length());
        System.out.println(Arrays.toString(planets));   

        // lambda expression , reverse the name , then sort in ascending order
        // hint use  new StringBuilder(first).reverse().toString() to reverse the string
        System.out.println("6) Sorted in dictionary order of the reversed name (ascending)");
        Arrays.sort(planets, (first, second) -> new StringBuilder(first).reverse().toString().compareTo(second));
        System.out.println(Arrays.toString(planets));

        // lambda expression , reverse the name , then sort in descending order
        System.out.println("7) Sorted in dictionary order of the reversed name (descending)");
        Arrays.sort(planets, (first, second) -> new StringBuilder(second).reverse().toString().compareTo(first));
        System.out.println(Arrays.toString(planets));

我这辈子都弄不明白的是,所有 3 个表达式都得到了完全相同的结果……每个表达式都给出了从最长到最短排序的原始数组。

这是我的结果:

5) 按长度排序(降序): [海王星、水星、木星、天王星、土星、金星、地球、火星]

6) 按字典顺序逆序排列(升序) [海王星、水星、木星、天王星、土星、金星、地球、火星]

7) 按字典顺序倒序排列(降序) [海王星、水星、木星、天王星、土星、金星、地球、火星]

最佳答案

不使用 Stream API 并就地更新字符串的替代解决方案:

Arrays.asList(planets).replaceAll(s -> new StringBuilder(s).reverse().toString());

演示:

String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", 
        "Jupiter", "Saturn", "Uranus", "Neptune" };
Arrays.asList(planets).replaceAll(s -> new StringBuilder(s).reverse().toString());
System.out.println(Arrays.toString(planets));
// [yrucreM, suneV, htraE, sraM, retipuJ, nrutaS, sunarU, enutpeN]

关于java - 用于反转字符串的 Lambda 表达式 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35424203/

相关文章:

java - Genson 属性读取错误

java - 类(class)计划 - java JApplet

java - 如何在 TornadoFx 中为 BarChart 条形图着色?

java - Hibernate - native SQL + 非托管实体 + 集合

c - 使用 C 代码难以读取 DNA 序列文件

php - 将两个数组插入一个 mysql 行

c# - 将 C# 字节属性硬编码到模型中

Python functools.reduce,如何减少列表并返回一个新列表

C++11。 Lambdas成员变量捕获,STL列表中的 "this"指针陷阱

c++ - std::function 是如何实现的?