/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
import java.util.ArrayList ;
import java.util.Comparator ;
import java.util.List ;
import java.util.stream.Collectors ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
List< List< String>> data = new ArrayList<> ( ) ;
List< String> list1 = new ArrayList<> ( ) ;
List< String> list2 = new ArrayList<> ( ) ;
List< String> list3 = new ArrayList<> ( ) ;
list1.add ( "Siva" ) ;
list1.add ( "20" ) ;
list1.add ( "Hyd" ) ;
list1.add ( "TA" ) ;
list1.add ( "India" ) ;
list2.add ( "Suresh" ) ;
list2.add ( "22" ) ;
list2.add ( "Banglore" ) ;
list2.add ( "KA" ) ;
list2.add ( "India" ) ;
list3.add ( "Ramesh" ) ;
list3.add ( "24" ) ;
list3.add ( "Chennai" ) ;
list3.add ( "TN" ) ;
list3.add ( "India" ) ;
data.add ( list1) ;
data.add ( list2) ;
data.add ( list3) ;
List< List< String>> listSorted1 = data.stream ( )
.sorted ( ( x, y) -> {
int res = x.get ( 0 ) .compareTo ( y.get ( 0 ) ) ;
if ( res != 0 ) return res;
if ( res != 0 ) return res;
return x.get ( 2 ) .compareTo ( y.get ( 2 ) ) ;
} )
.collect ( Collectors.toList ( ) ) ;
System .
out .
println ( "Sorting without mapping: \n " + listSorted1
) ;
List< MyClass> listSorted2 = data.stream ( )
.map ( list -> MyClass.createMyClass ( list) )
.
sorted ( Comparator .
comparing ( MyClass
:: getName
) .
thenComparing ( MyClass
:: getAge
) .
thenComparing ( MyClass
:: getCity
) ) .collect ( Collectors.toList ( ) ) ;
System .
out .
println ( "\n Sorting with mapping: \n " + listSorted2
) ; }
static class MyClass {
int age;
return name;
}
public int getAge( ) {
return age;
}
return city;
}
return code;
}
return country;
}
public static MyClass createMyClass( List< String> list) {
if ( list == null || list.size ( ) < 5 ) {
return null ;
}
MyClass mc = new MyClass( ) ;
mc.name = list.get ( 0 ) ;
mc.
age = Integer .
valueOf ( list.
get ( 1 ) ) ; mc.city = list.get ( 2 ) ;
mc.code = list.get ( 3 ) ;
mc.country = list.get ( 4 ) ;
return mc;
}
@Override
return String .
format ( "(%s %d %s %s %s)" , name, age, city, code, country
) ; }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJTGlzdDxMaXN0PFN0cmluZz4+IGRhdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBMaXN0PFN0cmluZz4gbGlzdDEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBMaXN0PFN0cmluZz4gbGlzdDIgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBMaXN0PFN0cmluZz4gbGlzdDMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCiAgICAgICAgbGlzdDEuYWRkKCJTaXZhIik7CiAgICAgICAgbGlzdDEuYWRkKCIyMCIpOwogICAgICAgIGxpc3QxLmFkZCgiSHlkIik7CiAgICAgICAgbGlzdDEuYWRkKCJUQSIpOwogICAgICAgIGxpc3QxLmFkZCgiSW5kaWEiKTsKCiAgICAgICAgbGlzdDIuYWRkKCJTdXJlc2giKTsKICAgICAgICBsaXN0Mi5hZGQoIjIyIik7CiAgICAgICAgbGlzdDIuYWRkKCJCYW5nbG9yZSIpOwogICAgICAgIGxpc3QyLmFkZCgiS0EiKTsKICAgICAgICBsaXN0Mi5hZGQoIkluZGlhIik7CgogICAgICAgIGxpc3QzLmFkZCgiUmFtZXNoIik7CiAgICAgICAgbGlzdDMuYWRkKCIyNCIpOwogICAgICAgIGxpc3QzLmFkZCgiQ2hlbm5haSIpOwogICAgICAgIGxpc3QzLmFkZCgiVE4iKTsKICAgICAgICBsaXN0My5hZGQoIkluZGlhIik7CgogICAgICAgIGRhdGEuYWRkKGxpc3QxKTsKICAgICAgICBkYXRhLmFkZChsaXN0Mik7CiAgICAgICAgZGF0YS5hZGQobGlzdDMpOwogICAgICAgIAogICAgICAgIExpc3Q8TGlzdDxTdHJpbmc+PiBsaXN0U29ydGVkMSA9IGRhdGEuc3RyZWFtKCkKICAgICAgICAgICAgICAgIC5zb3J0ZWQoKHgsIHkpIC0+IHsKICAgICAgICAgICAgICAgICAgICBpbnQgcmVzID0geC5nZXQoMCkuY29tcGFyZVRvKHkuZ2V0KDApKTsKICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IDApIHJldHVybiByZXM7CiAgICAgICAgICAgICAgICAgICAgcmVzID0gSW50ZWdlci52YWx1ZU9mKHguZ2V0KDEpKS5jb21wYXJlVG8oSW50ZWdlci52YWx1ZU9mKHkuZ2V0KDEpKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmdldCgyKS5jb21wYXJlVG8oeS5nZXQoMikpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTb3J0aW5nIHdpdGhvdXQgbWFwcGluZzogXG4iICsgbGlzdFNvcnRlZDEpOwoKICAgICAgICBMaXN0PE15Q2xhc3M+IGxpc3RTb3J0ZWQyID0gZGF0YS5zdHJlYW0oKQogICAgICAgICAgICAgICAgLm1hcChsaXN0IC0+IE15Q2xhc3MuY3JlYXRlTXlDbGFzcyhsaXN0KSkKICAgICAgICAgICAgICAgIC5zb3J0ZWQoQ29tcGFyYXRvci5jb21wYXJpbmcoTXlDbGFzczo6Z2V0TmFtZSkudGhlbkNvbXBhcmluZyhNeUNsYXNzOjpnZXRBZ2UpLnRoZW5Db21wYXJpbmcoTXlDbGFzczo6Z2V0Q2l0eSkpCiAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblNvcnRpbmcgd2l0aCBtYXBwaW5nOiBcbiIgKyBsaXN0U29ydGVkMik7Cgl9CgkKCXN0YXRpYyBjbGFzcyBNeUNsYXNzIHsKICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICBpbnQgYWdlOwogICAgICAgIFN0cmluZyBjaXR5LCBjb2RlLCBjb3VudHJ5OwoKICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGludCBnZXRBZ2UoKSB7CiAgICAgICAgICAgIHJldHVybiBhZ2U7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENpdHkoKSB7CiAgICAgICAgICAgIHJldHVybiBjaXR5OwogICAgICAgIH0KCiAgICAgICAgcHVibGljIFN0cmluZyBnZXRDb2RlKCkgewogICAgICAgICAgICByZXR1cm4gY29kZTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q291bnRyeSgpIHsKICAgICAgICAgICAgcmV0dXJuIGNvdW50cnk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgc3RhdGljIE15Q2xhc3MgY3JlYXRlTXlDbGFzcyhMaXN0PFN0cmluZz4gbGlzdCkgewogICAgICAgICAgICBpZiAobGlzdCA9PSBudWxsIHx8IGxpc3Quc2l6ZSgpIDwgNSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIE15Q2xhc3MgbWMgPSBuZXcgTXlDbGFzcygpOwogICAgICAgICAgICBtYy5uYW1lID0gbGlzdC5nZXQoMCk7CiAgICAgICAgICAgIG1jLmFnZSA9IEludGVnZXIudmFsdWVPZihsaXN0LmdldCgxKSk7CiAgICAgICAgICAgIG1jLmNpdHkgPSBsaXN0LmdldCgyKTsKICAgICAgICAgICAgbWMuY29kZSA9IGxpc3QuZ2V0KDMpOwogICAgICAgICAgICBtYy5jb3VudHJ5ID0gbGlzdC5nZXQoNCk7CgogICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgfQoKICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiKCVzICVkICVzICVzICVzKSIsIG5hbWUsIGFnZSwgY2l0eSwgY29kZSwgY291bnRyeSk7CiAgICAgICAgfQogICAgfQp9
stdout
Sorting without mapping:
[[Ramesh, 24, Chennai, TN, India], [Siva, 20, Hyd, TA, India], [Suresh, 22, Banglore, KA, India]]
Sorting with mapping:
[(Ramesh 24 Chennai TN India), (Siva 20 Hyd TA India), (Suresh 22 Banglore KA India)]