Попробуйте использовать компаратор для сортировки ввода. Для удобства мы удалили ваш args -связанный код. Вам все равно нужно будет повторно добавить его правильно.
Необходимые Imports
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
Имя
class Name{
public static final String FULL_NAME_DELIMITER = " ";
public static final String PRINT_DELIMITER = ", ";
private String firstName;
private String lastName;
public Name(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
public static String[] getName(String fullName){
return fullName.split(FULL_NAME_DELIMITER);
}
public String getLastName(){
return this.lastName;
}
@Override
public String toString(){
return String.join(PRINT_DELIMITER , this.lastName, this.firstName);
}
public void print(){
System.out.println(this);
}
}
Компаратор
class NameComparator implements Comparator<Name>{
@Override
public int compare(Name a, Name b) {
return a.getLastName().compareTo(b.getLastName()); // ASC: a to b or DESC: b to a
}
}
Использование
public class Main {
// Holds the sorted names
private static List<Name> names = new ArrayList<>();
public static void main(String[] args) {
// The input names
String[] input = new String[]{
"john main",
"rob class",
"bob ram"
};
// Prepare list for sorting
String firstName;
String lastName;
String[] completeName;
for (String fullName : input) {
completeName = Name.getName(fullName);
firstName = completeName[0];
lastName = completeName[1];
names.add(new Name(firstName, lastName));
}
// Actually sort
names.sort(new NameComparator());
// Print
names.forEach(System.out::println);
}
}
EDIT
Чтобы использовать входные данные из командной строки, то арг параметр это то, что вы хотите использовать.
Использование с CommandLine Input
public class Main {
// Holds the sorted names
private static List<Name> names = new ArrayList<>();
public static void main(String[] args) {
// The method (in case something else than "sort" is desired)
String method = args[0];
// Check for valid method
if(!method.equals("sort")) return;
// The input names
String[] input = Arrays.copyOfRange(args, 1, args.length);
// Prepare list for sorting
String firstName;
String lastName;
String[] completeName;
for (String fullName : input) {
completeName = Name.getName(fullName);
firstName = completeName[0];
lastName = completeName[1];
names.add(new Name(firstName, lastName));
}
// Actually sort
names.sort(new NameComparator());
// Print
names.forEach(System.out::println);
}
}
EDIT 2
Чтобы использовать имя вместо фамилии, просто изменить компаратор.
class NameComparator implements Comparator<Name>{
@Override
public int compare(Name a, Name b) {
return a.getFirstName().compareTo(b.getFirstName()); // ASC: a to b or DESC: b to a
}
}
Конечно, вам нужно будет настроить класс Имя, а также, добавив:
public String getFirstName(){
return this.firstName;
}
Где ваш вход приходит? что такое 'args_name'? что такое 'имя'? Покажите весь код. Этот код не компилируется. – nhouser9
вы дадите список имен от CMD? –
Если вы читаете имена для сортировки из командной строки, как вы можете различать имена и фамилии? –