Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于反转字符串的Lambda表达式-Java_Java_Arrays_Lambda_Java 8 - Fatal编程技术网

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

用于反转字符串的Lambda表达式-Java,java,arrays,lambda,java-8,Java,Arrays,Lambda,Java 8,我有一个简单的行星名称数组,我想反转添加到数组中的每个名称(而不是字符串顺序)。 我仍在努力学习lambda语法: String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" }; 目前我得到: 这条线上有多个标记 类型StringBuilder中的方法reverse()不适用于参数(Stri

我有一个简单的行星名称数组,我想反转添加到数组中的每个名称(而不是字符串顺序)。
我仍在努力学习lambda语法:

String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", 
                  "Jupiter", "Saturn", "Uranus", "Neptune" };
目前我得到:

这条线上有多个标记

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

谢谢大家的建议。。。asList让我接近了。我仍然没有正确分类

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

我已经打电话给老师要求澄清,但我的时间不多了

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

Arrays.sort(planets, (first, second) -> new StringBuilder(first).reverse().toString());
System.out.println(Arrays.toString(planets));
在我的一生中,我无法弄明白的是,所有3个表达式都得到了完全相同的结果。。。每一个都给出了从最长到最短排序的原始数组

这是我的结果:

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

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

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

这将为你做到:

            // 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));
或者,如果您只想打印,请使用以下命令:

[htrae, sram, yrucrem]
O/p:


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

htrae
sram
yrucrem
演示:


Arrays.sort
需要一个比较器作为第二个参数。它可以用一个lambda表达式实现,该表达式将两个字符串作为参数(在您的情况下)并返回一个整数(这是
比较器
接口中定义的SAM的要求)

是一个lambda表达式,它接受两个字符串(类型由编译器推断),但它返回一个字符串而不是整数,因此出现错误:

(first, second) -> new StringBuilder(first).reverse().toString()
我有一个简单的行星名称数组,我想反转每个名称 已添加到数组中的

在这种情况下,您只需使用
Arrays.setAll
即可就地修改数组:

java: incompatible types: cannot infer type-variable(s) T
    (argument mismatch; bad return type in lambda expression
      java.lang.String cannot be converted to int)

为什么要调用
Arrays.sort()
?我使用Arrays.sort(),因为我被要求做家庭作业。
replaceAll()
。。嗯,这是一个有趣的方法+1:)如果要使用链接的
forEach
直接打印结果,可以省略
.toString()
调用…下面是我的代码:Arrays.setAll(planets,i->new StringBuilder(planets[i]).reverse().toString();但是我尝试这样做会得到以下结果:类型数组的方法setAll(String[],(i)->{})是未定义的
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]
(first, second) -> new StringBuilder(first).reverse().toString()
java: incompatible types: cannot infer type-variable(s) T
    (argument mismatch; bad return type in lambda expression
      java.lang.String cannot be converted to int)
Arrays.setAll(planets, i -> new StringBuilder(planets[i]).reverse().toString());