Как отсортировать ArrayList по убыванию вставленных целочисленных чисел типа String
Столкнулся с задачей отсортировать биржи по объему, от большего к меньшему, но, все перевести я должен в ArrayList, если с названием и URL проблем нет, то вот как отсортировать по убыванию думаю весь день.
Методом .sort() не получается, к сожалению.
Объект в ArrayList выглядит так:
4710,BitMart-https://www.bitmart.com/trade/en?layout=basic&symbol=XCAD_USDT| $XCAD / $USDT |
4710 - объем
Как по нему отсортировать?
Ответы (2 шт):
Если "числовое число" находится в начале строки и после него следует запятая, можно вырезать подстроку до первой запятой при помощи String::substring + String::indexOf, преобразовать её в целое при помощи Integer::parseInt, и отсортировать при помощи Comparator.comparingInt + Comparator::reversed
list.sort(
Comparator.<String>comparingInt(s -> Integer.parseInt(
s.substring(0, s.indexOf(","))
))
.reversed()
);
Если я правильно понял как у тебя хранятся данные в ArrayList<String>
То думаю можно сделать так:
List<String> list = new ArrayList<>();
list.add("2");
list.add("1");
list.add("6");
list.add("5");
System.out.println(list.toString());
Вывод [2, 1, 6, 5]
list.sort(new Comparator<String>()
{
@Override
public int compare(String o1, String o2)
{
return o1.compareTo(o2);
}
});
System.out.println(list.toString());
Вывод [1, 2, 5, 6]
UPD
list.add("2, F");
list.add("1, C");
list.add("6, A");
list.add("5, D");
Вывод [2, F, 1, C, 6, A, 5, D]
list.sort(new Comparator<String>()
{
@Override
public int compare(String o1, String o2)
{
o1 = o1.substring(0, o1.indexOf(","));
o2 = o2.substring(0, o2.indexOf(","));
return o1.compareTo(o2);
}
});
Вывод [1, C, 2, F, 5, D, 6, A]