用于反转字符串的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
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());