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

Chr*_*son 5 java arrays lambda java-8

String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", 
                  "Jupiter", "Saturn", "Uranus", "Neptune" };
Run Code Online (Sandbox Code Playgroud)

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

Arrays.sort(planets, (first, second) -> new StringBuilder(first).reverse().toString());
System.out.println(Arrays.toString(planets));
Run Code Online (Sandbox Code Playgroud)

目前我得到:

此行有多个标记

  • reverse()类型中的方法StringBuilder不适用于参数 (String)
  • 类型不匹配:无法转换Stringint

响应:

谢谢大家的建议...... asList让我走近了.我仍然没有正确排序.

所以我需要找到一种方法使array.sort工作,因为这是赋值(采取array.sort和lambda).

我已经指示教练在这里要求澄清,但我已经没时间了.

这是我的工作,试图保持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));
Run Code Online (Sandbox Code Playgroud)

在我的生活中我无法想象的是,所有3个表达式都得到了完全相同的结果...每个都给了我最长到最短的原始数组.

这是我的结果:

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

6)按反向名称的字典顺序排序(升序)[海王星,水星,木星,天王星,土星,金星,地球,火星]

7)按反向名称(降序)的字典顺序排序[海王星,水星,木星,天王星,土星,金星,地球,火星]

Tag*_*eev 8

另一种解决方案,它不使用Stream API并就地更新字符串:

Arrays.asList(planets).replaceAll(s -> new StringBuilder(s).reverse().toString());
Run Code Online (Sandbox Code Playgroud)

演示:

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]
Run Code Online (Sandbox Code Playgroud)

  • `replaceAll()`..嗯有趣的方法.. + 1 :) (3认同)