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

JAVA:如何减少代码大小,当使用lambda处理数组的项目

邵凯定
2023-03-14

我必须按字母顺序对数组中的每一项进行排序

in:[bcdef, dbaqc, abcde, omadd, bbbbb]out:[bcdef, abcdq, abcde, addmo, bbbbb]

我写了下面的代码,但我觉得它很冗长。

你能告诉我另一种代码更短的方法吗?

谢谢

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import static java.lang.String.copyValueOf;

public class Main {

    public static void main(String[] args) {
        String[] stringsArray = { "bcdef", "dbaqc", "abcde", "omadd", "bbbbb"};

        System.out.println(Arrays.toString(stringsArray));

        List<String> list = Arrays.stream(stringsArray).map((String s)->{
            char[] charArray = s.toCharArray();
            Arrays.sort(charArray);
            return copyValueOf(charArray);
        }).collect(Collectors.toList());
        ArrayList<String> arrayList = new ArrayList<String>(list);
        stringsArray = Arrays.copyOf(arrayList.toArray(),arrayList.size(),String[].class);

        System.out.println(Arrays.toString(stringsArray));
    }

}

共有2个答案

林昱
2023-03-14

因为必须按字母顺序排序,所以可以使用数组。sort()

public class Sorting {

    public static void main(String[] args) {
        String[] stringsArray = { "bcdef", "dbaqc", "abcde", "omadd", "bbbbb"};
        System.out.println("Initial array - " + Arrays.toString(stringsArray));
        Arrays.sort(stringsArray);
        System.out.println("Sorted array - " + Arrays.toString(stringsArray));
    }
}

或者使用stream,如果您想保持原始数组未排序。

public class Sorting {

    public static void main(String[] args) {
        String[] stringsArray = { "bcdef", "dbaqc", "abcde", "omadd", "bbbbb"};
        System.out.println("Initial array - " + Arrays.toString(stringsArray));
        String[] sortedArray = Arrays.stream(stringsArray)
                .sorted()
                .toArray(String[]::new);
        System.out.println("New sorted array with stream - " + Arrays.toString(sortedArray));
    }
}
井誉
2023-03-14

看起来您希望对每个元素中的字符进行排序,而不是整个数组。

您可以通过使用单独的map()(和peek())来简化,因为数组。sort()方法未返回值)步骤。通过直接收集到字符串数组,也可以跳过冗余的列表

String[] sorted = Arrays.stream(stringsArray)
    .map(String::toCharArray)
    .peek(Arrays::sort)
    .map(String::new)
    .toArray(String[]::new);
 类似资料:
  • 问题内容: 我正在开发一个 Java Web应用程序 ,其中包括 一个applet 。该小程序依赖于两个jar文件: JFreeChart(用于在客户端绘制图) -1.7 mb(jar文件的大小) MySqlJdbcConnector(用于将在客户端捕获的数据存储到远程数据库)-. 7 mb(JAR文件的大小) 现在,问题是上述两个jar文件的大小。我的小应用程序jar (myApplet.jar

  • 我有一个应用程序,它使用大量的内存来区分两个潜在的巨大(100k)目录的内容。对我来说,这样的操作会占用大量内存是有道理的,但是一旦我的 diff'ing 操作完成,堆的大小就会保持不变。 我基本上有实例化类的代码,用于存储源和目标上每个文件的文件名、文件大小、路径和修改日期。我将添加、删除和更新保存在其他数组中。然后,我我的源数组和目标数组(现在可能每个都是100k),只剩下相对较小的添加、删除

  • 问题内容: 我是AWS Lambda的新手,我已使用处理程序创建了Lambda函数 这是自定义处理程序,现在我想从我的Java程序中调用它,我需要如何做。 问题答案: 此类中的2种方法应该可以为您提供帮助。一种是用于需要传递有效负载的情况,另一种是用于有效负载为null的情况。 但是,您需要记住一件事:函数名称可能与处理程序不同(后者在)。调用其功能时 不 使用该处理程序名称。 因此,如果您有一个

  • 问题内容: 我们将Java 6 JRE与我们的应用程序安装程序捆绑在一起,以便可以在任何计算机上运行,​​但这会使应用程序变得更重。因此,我们计划减小JRE的大小。如果有人完成了此类任务,您能否提供指导以继续前进? 问题答案: 查看JRE目录中的README文件。“可选文件和目录”部分列出了一些文件(如果将它们与应用程序打包在一起,可以从Oracle / Sun JRE中删除)。 创建安装时,我使

  • 问题内容: 让我们比较一下c:Hello_world.c: Hello_world.go: 都编译: 还有,这是什么? 大约1Mb的世界。你在跟我开玩笑吗?我做错了什么? (仅限Hello_go-> 893K) 问题答案: 文件较大是否有问题?我不知道Go,但是我认为它会静态链接某些运行时库,而C程序则不是这种情况。但是,只要程序变大,就不必担心。 如上所述这里,静态链接Go运行时是默认的。该页面

  • 我有一个Gatsby.js项目,其中我的包的解析大小是3.92MB。其中1.1MB是。传单似乎也提供了只有508KB的。阅读本期后,每当我导入传单时,我总是导入较小的版本,如下所示: 不管怎样,每当我运行Webpack Bundle Analyzer时,都会导入和:Webpack Bundle Analyzer Result 我提到的GitHub问题似乎暗示了如何配置webpack以使用优化版本,