Вы можете использовать оператор CASE
, чтобы сделать это
select count(id) as id_name,
case when category = 'Laki-laki' then 'Umum' else category end as media
from tb_gadar
where d BETWEEN '2018-04-01' and '2019-12-31'
and category in ('Laki-laki','Perempuan')
group by category
Используйте API sort(List list, Comparator c)
, который определяет компаратор, и реализуйте его так, как вы хотите.
В качестве альтернативы, если вам конкретно не нужен список, используйте SortedSet
, то же самое относится и к компаратору.
Collections.sort(fooList,
new Comparator<Foo>()
{
public int compare(Foo f1, Foo f2)
{
return f1.toString().compareTo(f2.toString());
}
});
Предполагая, что toString никогда не возвращает ноль и что в списке нет нулевых элементов.
public class Foo
implements Comparable<Foo>
{
private String aField;
public Foo(String s)
{
aField=s;
}
public String getAField()
{
return aField;
}
public int compareTo(Foo other)
{
return getAField().compareTo(other.getAField());
}
@Override
public String toString()
{
return getAField();
}
}
и затем
Collections.sort (список);
Я сделал бы что-то очень похожее на Pierre:
public class Foo implements Comparable<Foo>
{
private String aField;
@Override
public String toString()
{
return aField;
}
public int compareTo(Foo o)
{
return this.toString().compareTo(o.toString());
}
}
Затем как Pierre, я использовал бы Collections.sort(list)
, как Pierre предполагает.
Версия Java 8:
list.sort(Comparator.comparing(Object::toString));
Или потоковая передача:
List<Foo> sortedList = unsortedList
.stream()
.sorted(Comparator.comparing(Object::toString)))
.collect(Collectors.toList());
Я настоятельно рекомендовал бы Вам только использовать toString для отладки целей... однако..., чтобы подробно остановиться на том, что Yuval A записал выше...
public class X implements Comparator { public int compare(final Foo a, final Foo b) { return (a.toString().compareTo(b.toString())); } }
Однако Вы действительно должны сделать, чтобы Foo реализовал Comarable или записал надлежащий Compartor, который не использует toString.
lambdaj позволяет сортировать, фильтровать и вообще манипулировать коллекциями без написания циклов или неясных внутренних классов. Например, сортировка, которую вы запрашивали, может быть достигнута следующим образом:
sort(foos, on(Foo.class).toString());
Если вы заинтересованы в этом, проверьте это по адресу:
Если Вы хотите, чтобы набор остался отсортированным, вместо того, чтобы сортировал его в отдельных моментах, Вы могли поместить его в TreeSet с определенным Компаратором. Иначе я использовал бы метод Collections.sort, уже упомянутый Yuval.
Collections.sort(myPojoList, (a, b) -> a.getId() - b.getId()); //ASC
Collections.sort(myPojoList, (a, b) -> b.getId() - a.getId()); //DESC
//Alternatively use Integer.compare()
Collections.sort(myPojoList, (a, b) -> Integer.compare(a.getId(), b.getId())); //ASC
Collections.sort(myPojoList, (a, b) -> Integer.compare(b.getId(), a.getId())); //DESC
Collections.sort(myPojoList, (a, b) -> a.getName().compareTo(b.getName())); //ASC
Collections.sort(myPojoList, (a, b) -> b.getName().compareTo(a.getName())); //DESC
Collections.sort(myPojoList, (a, b) -> Boolean.compare(a.isMale(), b.isMale())); //ASC
Collections.sort(myPojoList, (a, b) -> Boolean.compare(b.isMale(), a.isMale())); //DESC
myPojoList= new ArrayList<>(new LinkedHashSet<>(myPojoList)); //Distinct
google-collections делает это очень легко с помощью Ordering :
Collections.sort(list, Ordering.usingToString());
целая сторонняя библиотека, чтобы использовать то, что вы могли бы тривиально написать с помощью компаратора (как другие предоставили) стоящего? Нет, но коллекции google - это так здорово, что вы все равно захотите иметь их по ряду других причин.
На фронте сортировки вы также можете легко делать такие вещи, как реверсирование:
Ordering.usingToString().reverse();
или разрыв связей:
Ordering.usingToString().compound(someOtherComparator);
] или иметь дело с нулями:
Ordering.usingToString().nullsFirst();
и т. д., но там есть еще куча вещей (конечно, не только связанных с сортировкой), которые приводят к действительно выразительному коду. Оцените это!