/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static class MyObject {
private int price;
private int quality;
MyObject
(Date date,
int price,
int quality
) { this.date = date;
this.price = price;
this.quality = quality;
}
return date;
}
public int getPrice() {
return price;
}
public int getQuality() {
return quality;
}
@Override
return "MyObject[" + sdf.format(date) + ", " + price + ", " + quality + "]";
}
}
private static class MyObjectComparator implements Comparator<Object> {
public MyObjectComparator
(String field
) { this.getter = "get" + field.substring(0, 1).toUpperCase() + field.substring(1);
}
@Override
try {
if (o1 != null && o2 != null) {
o1
= o1.
getClass().
getMethod(getter,
new Class[0]).
invoke(o1,
new Object[0]); o2
= o2.
getClass().
getMethod(getter,
new Class[0]).
invoke(o2,
new Object[0]); }
throw new RuntimeException("Cannot compare " + o1
+ " with " + o2
+ " on " + getter, e
); }
return (o1 == null) ? -1 : ((o2 == null) ? 1 : ((Comparable<Object>) o1).compareTo(o2));
}
}
{
List<MyObject> objs = new ArrayList<>();
objs.add(new MyObject(sdf.parse("21/12/2015"), 1234, 2));
objs.add(new MyObject(sdf.parse("12/01/2016"), 134, 4));
objs.add(new MyObject(sdf.parse("01/01/2012"), 3244, 1));
System.
out.
println("Сортировка по качеству:"); Collections.
sort(objs,
new MyObjectComparator
("quality"));
System.
out.
println("Сортировка по цене:"); Collections.
sort(objs,
new MyObjectComparator
("price"));
System.
out.
println("Сортировка по дате:"); Collections.
sort(objs,
new MyObjectComparator
("date")); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnRleHQuKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlPYmplY3QgewoJCXByaXZhdGUgRGF0ZSBkYXRlOwoJCXByaXZhdGUgaW50IHByaWNlOwoJCXByaXZhdGUgaW50IHF1YWxpdHk7CgkJCgkJTXlPYmplY3QoRGF0ZSBkYXRlLCBpbnQgcHJpY2UsIGludCBxdWFsaXR5KSB7CgkJCXRoaXMuZGF0ZSA9IGRhdGU7CgkJCXRoaXMucHJpY2UgPSBwcmljZTsKCQkJdGhpcy5xdWFsaXR5ID0gcXVhbGl0eTsKCQl9CgkJCgkJcHVibGljIERhdGUgZ2V0RGF0ZSgpIHsKCQkJcmV0dXJuIGRhdGU7CgkJfQoJCQoJCXB1YmxpYyBpbnQgZ2V0UHJpY2UoKSB7CgkJCXJldHVybiBwcmljZTsKCQl9CgkJCgkJcHVibGljIGludCBnZXRRdWFsaXR5KCkgewoJCQlyZXR1cm4gcXVhbGl0eTsKCQl9CgkJCgkJQE92ZXJyaWRlCgkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKCQkJRm9ybWF0IHNkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJkZC9NTS95eXl5Iik7CgkJCXJldHVybiAiTXlPYmplY3RbIiArIHNkZi5mb3JtYXQoZGF0ZSkgKyAiLCAiICsgcHJpY2UgKyAiLCAiICsgcXVhbGl0eSArICJdIjsKCQl9Cgl9CgkKCXByaXZhdGUgc3RhdGljIGNsYXNzIE15T2JqZWN0Q29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8T2JqZWN0PiB7CgoJICAgIHByaXZhdGUgU3RyaW5nIGdldHRlcjsKCQoJICAgIHB1YmxpYyBNeU9iamVjdENvbXBhcmF0b3IoU3RyaW5nIGZpZWxkKSB7CgkgICAgICAgIHRoaXMuZ2V0dGVyID0gImdldCIgKyBmaWVsZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIGZpZWxkLnN1YnN0cmluZygxKTsKCSAgICB9CgkKCSAgICBAT3ZlcnJpZGUKCSAgICBwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKCSAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgIGlmIChvMSAhPSBudWxsICYmIG8yICE9IG51bGwpIHsKCSAgICAgICAgICAgICAgICBvMSA9IG8xLmdldENsYXNzKCkuZ2V0TWV0aG9kKGdldHRlciwgbmV3IENsYXNzWzBdKS5pbnZva2UobzEsIG5ldyBPYmplY3RbMF0pOwoJICAgICAgICAgICAgICAgIG8yID0gbzIuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoZ2V0dGVyLCBuZXcgQ2xhc3NbMF0pLmludm9rZShvMiwgbmV3IE9iamVjdFswXSk7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fubm90IGNvbXBhcmUgIiArIG8xICsgIiB3aXRoICIgKyBvMiArICIgb24gIiArIGdldHRlciwgZSk7CgkgICAgICAgIH0KCQoJICAgICAgICByZXR1cm4gKG8xID09IG51bGwpID8gLTEgOiAoKG8yID09IG51bGwpID8gMSA6ICgoQ29tcGFyYWJsZTxPYmplY3Q+KSBvMSkuY29tcGFyZVRvKG8yKSk7CgkgICAgfQoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlTaW1wbGVEYXRlRm9ybWF0IHNkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJkZC9NTS95eXl5Iik7CgkJTGlzdDxNeU9iamVjdD4gb2JqcyA9IG5ldyBBcnJheUxpc3Q8PigpOwoJCW9ianMuYWRkKG5ldyBNeU9iamVjdChzZGYucGFyc2UoIjIxLzEyLzIwMTUiKSwgMTIzNCwgMikpOwoJCW9ianMuYWRkKG5ldyBNeU9iamVjdChzZGYucGFyc2UoIjEyLzAxLzIwMTYiKSwgMTM0LCA0KSk7CgkJb2Jqcy5hZGQobmV3IE15T2JqZWN0KHNkZi5wYXJzZSgiMDEvMDEvMjAxMiIpLCAzMjQ0LCAxKSk7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCLQodC+0YDRgtC40YDQvtCy0LrQsCDQv9C+INC60LDRh9C10YHRgtCy0YM6Iik7CgkJQ29sbGVjdGlvbnMuc29ydChvYmpzLCBuZXcgTXlPYmplY3RDb21wYXJhdG9yKCJxdWFsaXR5IikpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihvYmpzKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oItCh0L7RgNGC0LjRgNC+0LLQutCwINC/0L4g0YbQtdC90LU6Iik7CgkJQ29sbGVjdGlvbnMuc29ydChvYmpzLCBuZXcgTXlPYmplY3RDb21wYXJhdG9yKCJwcmljZSIpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4ob2Jqcyk7CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCLQodC+0YDRgtC40YDQvtCy0LrQsCDQv9C+INC00LDRgtC1OiIpOwoJCUNvbGxlY3Rpb25zLnNvcnQob2JqcywgbmV3IE15T2JqZWN0Q29tcGFyYXRvcigiZGF0ZSIpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4ob2Jqcyk7Cgl9Cn0=
Сортировка по качеству:
[MyObject[01/01/2012, 3244, 1], MyObject[21/12/2015, 1234, 2], MyObject[12/01/2016, 134, 4]]
Сортировка по цене:
[MyObject[12/01/2016, 134, 4], MyObject[21/12/2015, 1234, 2], MyObject[01/01/2012, 3244, 1]]
Сортировка по дате:
[MyObject[01/01/2012, 3244, 1], MyObject[21/12/2015, 1234, 2], MyObject[12/01/2016, 134, 4]]