Java的:Arrays.sort()与拉姆达前pression [英] java: Arrays.sort() with lambda expression

查看:148
本文介绍了Java的:Arrays.sort()与拉姆达前pression的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要使用 Arrays.sort 法阵按长度字符串元素进行排序。有人告诉我, rel=\"nofollow\">,它可能使用拉姆达前pressions,而不是创建新类实现比较。它是否完全相同的方式,但它不能正常工作。

 进口java.util.Arrays中;
进口了java.util.Comparator;公共类MainClass {
公共静态无效的主要(字串[] args)
{    的String []月= {\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"December\"};    的System.out.println(Arrays.toString(月));前//打印
    //没有这个工程:
    Arrays.sort(月,
            (A,B) - > Integer.signum(则为a.length() - b.length个())
    );    //和本:
    Arrays.sort(月,
            (一个字符串,字符串二) - > {返回Integer.signum(则为a.length() - b.length个())};
    );
    的System.out.println(Arrays.toString(月)); //打印后
}
}


最干净的方法是:

  Arrays.sort(月,Comparator.comparing(字符串长度::));

或者,用静态导入:

  Arrays.sort(月比较(字符串长度::));


然而,这工作太,但更详细的:

  Arrays.sort(月,
            (一个字符串,字符串二) - >则为a.length() - b.length个());

或较短的:

  Arrays.sort(个月,(A,B) -  GT;则为a.length() -  b.length个());


最后的最后一个:

  Arrays.sort(月,
    (一个字符串,字符串二) - > {返回Integer.signum(则为a.length() - b.length个())};
);

; 放错了地方 - 它应该是:

  Arrays.sort(月,
    (一个字符串,字符串二) - > {返回Integer.signum(则为a.length() - b.length个()); }
);

I want to sort String elements in the array months by length using Arrays.sort method. I was told here, that it's possible to use lambda expressions instead of creating new class implementing Comparator. Did it exactly the same way, yet it doesn't work.

import java.util.Arrays;
import java.util.Comparator;

public class MainClass {
public static void main(String[] args)
{

    String[] months = {"January","February","March","April","May","June","July","August","September","October","December"};

    System.out.println(Arrays.toString(months)); //printing before


    //neither this works:
    Arrays.sort(months, 
            (a, b) -> Integer.signum(a.length() - b.length())   
    );

    //nor this:
    Arrays.sort(months, 
            (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; 
    );


    System.out.println(Arrays.toString(months)); //printing after
}
}

解决方案

The cleanest way would be:

Arrays.sort(months, Comparator.comparing(String::length));

or, with a static import:

Arrays.sort(months, comparing(String::length));


However, this would work too but is more verbose:

Arrays.sort(months,
            (String a, String b) -> a.length() - b.length());

Or shorter:

Arrays.sort(months, (a, b) -> a.length() - b.length());


Finally your last one:

Arrays.sort(months, 
    (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; 
);

has the ; misplaced - it should be:

Arrays.sort(months, 
    (String a, String b) -> { return Integer.signum(a.length() - b.length()); }
);

这篇关于Java的:Arrays.sort()与拉姆达前pression的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆