我有一个C类,我想string使用operator string()语法将其转换为,但正如我在评论中所写,发生了一些奇怪的事情。
class C {
public:
operator string()
{
return string("anything");
}
};
int main()
{
C c;
cout << string("test:").append(c) << endl; //success
//cout << string("test:")+c<< endl;//fail
//cout << c.append("test:") << endl;//fail
cout << string("test:") + static_cast<string>(c) << endl;//success
}
Run Code Online (Sandbox Code Playgroud) 例如 [[5,6][2,3][2,5][2,9][1,6]] 首先按第一个元素升序排序,当一个元素相等时,按第二个元素排序元素按降序排列,结果为 [1,6],[2,9],[2,5],[2,3],[5,6]
我是 Lambda 的新手,这是教科书(简而言之 java)所说的内容:
只有某些类型才有资格成为 lambda 的目标。目标类型也称为功能接口,它们必须:
- 成为接口
- 只有一种非默认方法(但可能有其他默认方法)
这本书给了我一个例子:
File dir =new File("/src");
String[] fileList =dir.list((d,fName)->fName.endWith(".java"))
Run Code Online (Sandbox Code Playgroud)
我知道这个 lambda 会转换成一个FilenameFilter接口,@FunctionalInterface它确实与书中的描述相符
但是我可以在这里使用 lambda 来sort()期望收到一个Comparator
int n =12;
Function<String,String[]> f = (s) -> {
String[] ans = new String[n];();
for (int i = 0; i < n; i++) {
ans[i] = s;
}
return ans;};
Arrays.sort(f.apply("colin"),(String s1 ,String s2)->{
return s1.length() - s2.length();});
Run Code Online (Sandbox Code Playgroud)
我查看了它的源代码,发现Comparator是一个@FunctionInterface

但它有两个非默认方法compare和。equals它与书中所说的不同。