从多个命令行参数中打印较小的字符串

时间:2017-08-06 11:53:55

标签: java string arguments

我想扩展我当前的程序以接受任意数量的命令行参数并打印其中较小的一些(区分大小写)。目前它是这样的:

public class StringCompare {

    public static void main(String[] args) {

        String s1 = new String(args[0]);
        String s2 = new String(args[1]);

        if (s1.compareTo(s2) > 0) {
            System.out.println(s2);
        }
        else if (s1.compareTo(s2) < 0) {
            System.out.println(s1);
        }
        else {
            System.out.println("Both are equal.");
        }       
    }
}

我之后的例子:

Input: aaa aa a aAa

Output: a

这会是一种优雅的方法吗?

2 个答案:

答案 0 :(得分:3)

使用Java 8语法和lambdas可以执行以下操作:

已编辑(基于@Aominè评论中的建议)

public static void main(String[] args) {

    String min = Arrays.stream(args)
             .min(String::compareTo)
           .orElse("<none>");

    System.out.println(min);
}

<小时/> 如果您想知道所有字符串是否相等,您可能需要添加额外的步骤来检查它:

public static void main(String[] args) {

    String min = Arrays.stream(args)
            .min(String::compareTo)
        .orElse("<none>");

    if (!Arrays.stream(args)
            .allMatch(x-> x.equals(min))) {
        System.out.println(min);
    } else {
        System.out.println("All are equal.");
    }
}

答案 1 :(得分:1)

使用for循环和temp(较小)String变量。

var distanceDuration = { distance: '273 km', duration: '2 hours 55 mins'];
var distance = distanceDuration.distance;
// using destructuring:
var {duration} = distanceDuration;