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));
目前我得到:
此行有多个标记
reverse()
类型中的方法StringBuilder
不适用于参数(String)
- 类型不匹配:无法从
String
转换为int
响应:
谢谢大家的建议...... 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));
在我的生活中我无法想象的是,所有3个表达式都得到了完全相同的结果......每个表达式都给了我最长到最短的原始数组。
这是我的结果:
5)按长度排序(降序): [海王星,水星,木星,天王星,土星,金星,地球,火星]
6)按反向名称的字典顺序排序(升序) [海王星,水星,木星,天王星,土星,金星,地球,火星]
7)按反转名称的字典顺序排序(降序) [海王星,水星,木星,天王星,土星,金星,地球,火星]
答案 0 :(得分:8)
另一种解决方案,它不使用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]
答案 1 :(得分:4)
这将为你做到:
public static void main(String[] args) {
String[] arr = {"earth", "mars", "mercury"};
List<String> ll = Arrays.stream(arr).map(s -> new StringBuilder(s).reverse().toString()).collect(Collectors.toList());
System.out.println(ll);
}
O / P:
[htrae, sram, yrucrem]
或者如果您只想打印,请使用:
String[] arr = {"earth", "mars", "mercury"};
Arrays.stream(arr).map(s -> new StringBuilder(s).reverse().toString()).forEach(System.out::println);
O / P:
htrae
sram
yrucrem
答案 2 :(得分:2)
Arrays.sort
需要比较器作为第二个参数。它可以用lambda表达式实现,该表达式将两个字符串作为参数(在您的情况下)并返回一个整数(这是Comparator
接口中定义的SAM的要求)。
(first, second) -> new StringBuilder(first).reverse().toString()
是一个lambda表达式,它接受两个字符串(类型由编译器推断),但它返回一个字符串而不是整数,因此错误:
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
来修改数组:
Arrays.setAll(planets, i -> new StringBuilder(planets[i]).reverse().toString());