当前位置: 首页 > 知识库问答 >
问题:

Lambda表达式反转字符串-Java

诸葛绍元
2023-03-14
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));

目前我得到:

这条线上有多个标记

  • 类型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) 按字典中倒转名称的顺序排序(降序)[海王星、水星、木星、天王星、土星、金星、地球、火星]

共有3个答案

姬振
2023-03-14

rrays.sort需要一个比较器作为第二个参数。它可以用一个lambda表达式来实现,该表达式将两个字符串作为参数(在您的情况下),并返回一个整数(这是在比较器接口中定义的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());
长孙嘉
2023-03-14

这将为您做到这一点:

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
上官和韵
2023-03-14

一种不使用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]
 类似资料:
  • 问题内容: 我想了一下,想到了一个有趣的问题,假设我们有一个配置(输入)文件,其中: 此外,我们还有s 的列表: 有没有办法将s(等)转换为代表lambda表达式的s?然后可以用作: 我将如何编写这样的方法? 我可以从JDK / JRE中重用吗? 我需要自己编写所有内容吗? 是否有可能将范围缩小到仅捕获lambda的其他内容? 问题答案: 马可对这个问题的评论是正确的。您无法从文件中读取裸Java

  • 问题内容: 我有采用SQL where子句的函数,我想知道是否有一种方法可以使它们全部成为强类型。有没有办法采用lambda表达式,例如=> a.AgencyID == id并将其转换为字符串where子句?就像“ AgencyID =’idValue’”一样? 谢谢! 问题答案: 您可以将lambda函数转换为表达式树,然后遍历该树以构建您的字符串。

  • 我在一个多语言网站上工作,并已选择使用每种语言的自定义URL,例如: 两者都指向城市控制员的指数方法。 在每个页面上都有一个切换语言的选项,它会在我的路由中查找以匹配控制器、视图和语言。 因此,如果我在荷兰语页面上,它会找到英文版的正确网址,即“城市”而不是“steden”。 在我开始使用更复杂的正则表达式之前,一切都很好。 我有这些正则表达式,它们将匹配我所需的URL: 在我的代码中,我可以访问

  • 使用Java 8 lambda语法将“key:value”形式的字符串数组转换为是否有更好的功能方法? 我现在的解决方案似乎并不实用:

  • 我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以

  • 因此,我正在处理一个项目,其中我必须将包含希腊字母的字符串转换为包含此字母的英语表示的字符串。因此,希腊将变为,将成为。 我已经创建了一个HashMap,它具有从Unicode字符到普通字符串的适当转换。 我使用了一个简单的循环来检查输入中的是否是中的,如果是,那么我将使用附加其替换。以下是我用来执行此操作的代码: 这是一个公共静态方法,以< code>String作为输入。我想知道的是,是否有可