gpt4 book ai didi

java - 如何使用lambda表达式调用比较器?

转载 作者:行者123 更新时间:2023-12-01 11:25:19 27 4
gpt4 key购买 nike

我正在做leetcode的最大数字问题。问题是这样的:

给定一个非负整数列表,将它们排列成最大的数字。

例如,给定 [3, 30, 34, 5, 9],最大的形成数字是 9534330。

还有一个 5 行 C# 代码:

internal static string LargestNumber(List<int> vals)
{
if(vals==null || vals.Count==0)
return "";
vals.Sort((a,b)=>String.Compare(b+""+a,a+""+b));
return vals[0]==0?"0":String.Join("",vals);
}

它使用 lambda 表达式。但是当我尝试编写java代码时:

public String largestNumber(int[] num) {
String[] sNum = new String[num.length];
for(int i = 0;i<num.length; i++){
sNum[i] = Integer.toString(num[i]);
}
Collections.sort(sNum,(String n1,String n2) -> (n1 + n2).compareTo(n2 + n1));
String s = sNum[0];
for(int i = 1;i<sNum.length;i++)
s += sNum[i];
if(s.charAt(0) == '0')
s = "0";
return s;
}

它报告错误:该行有多个标记 - 类型不匹配:无法从比较器转换为比较器 - Collections 类型中的方法 sort(List, Comparator) 不适用于 参数 (String[], (String n1, String n2) -> {})

谁能帮我解决java中的lambda表达式问题吗?

最佳答案

在 Java 中,如果没有显式转换,您无法将 int 排序为 String,但是,仍然可以通过一次操作来完成此操作:

public String largestNumber(int[] num) {
String s=Arrays.stream(num).mapToObj(Integer::toString)
.sorted((n1, n2) -> (n2+n1).compareTo(n1+n2))
.collect(Collectors.joining());
return s.charAt(0) == '0'? "0": s;
}

关于java - 如何使用lambda表达式调用比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com