Zaimplementuj funkcję SQL GROUP BY w Javie za pomocą komparatora, komparator porówna dane kolumny i posortuje je. Zasadniczo, jeśli przechowujesz posortowane dane, które wyglądają jak dane zgrupowane, na przykład jeśli masz te same powtarzające się dane w kolumnach, mechanizm sortowania sortuje je, zachowując te same dane po jednej stronie, a następnie szuka innych danych, które są niepodobnymi danymi. To pośrednio postrzegane jako GRUPOWANIE tych samych danych.
public class GroupByFeatureInJava {
public static void main(String[] args) {
ProductBean p1 = new ProductBean("P1", 20, new Date());
ProductBean p2 = new ProductBean("P1", 30, new Date());
ProductBean p3 = new ProductBean("P2", 20, new Date());
ProductBean p4 = new ProductBean("P1", 20, new Date());
ProductBean p5 = new ProductBean("P3", 60, new Date());
ProductBean p6 = new ProductBean("P1", 20, new Date());
List<ProductBean> list = new ArrayList<ProductBean>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
list.add(p6);
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
ProductBean bean = (ProductBean) iterator.next();
System.out.println(bean);
}
System.out.println("******** AFTER GROUP BY PRODUCT_ID ******");
Collections.sort(list, new ProductBean().new CompareByProductID());
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
ProductBean bean = (ProductBean) iterator.next();
System.out.println(bean);
}
System.out.println("******** AFTER GROUP BY PRICE ******");
Collections.sort(list, new ProductBean().new CompareByProductPrice());
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
ProductBean bean = (ProductBean) iterator.next();
System.out.println(bean);
}
}
}
class ProductBean {
String productId;
int price;
Date date;
@Override
public String toString() {
return "ProductBean [" + productId + " " + price + " " + date + "]";
}
ProductBean() {
}
ProductBean(String productId, int price, Date date) {
this.productId = productId;
this.price = price;
this.date = date;
}
class CompareByProductID implements Comparator<ProductBean> {
public int compare(ProductBean p1, ProductBean p2) {
if (p1.productId.compareTo(p2.productId) > 0) {
return 1;
}
if (p1.productId.compareTo(p2.productId) < 0) {
return -1;
}
return 0;
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}
class CompareByProductPrice implements Comparator<ProductBean> {
@Override
public int compare(ProductBean p1, ProductBean p2) {
if (p1.price > p2.price) {
return 1;
}
if (p1.price < p2.price) {
return -1;
}
return 0;
}
public boolean equals(Object obj) {
return super.equals(obj);
}
}
class CompareByCreateDate implements Comparator<ProductBean> {
@Override
public int compare(ProductBean p1, ProductBean p2) {
if (p1.date.after(p2.date)) {
return 1;
}
if (p1.date.before(p2.date)) {
return -1;
}
return 0;
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}
}
Wynik jest tutaj dla powyższej listy ProductBean jest wykonywana według kryteriów GROUP BY, tutaj, jeśli zobaczysz dane wejściowe, które są podane jako lista ProductBean do kolekcji. Sortowanie (lista, obiekt komparatora dla wymaganej kolumny) To zostanie posortowane na podstawie implementacji twojego komparatora i będziesz mógł zobaczyć dane ZGRUPOWANE w poniższym wyniku. Mam nadzieję że to pomoże...
******** PRZED GRUPOWANIE DANYCH WEJŚCIOWYCH WYGLĄDA TAKIEGO ******
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
ProductBean [P1 30 Mon, 17 listopada, 09:31:01, IST 2014]
Fasola Produktowa [P2 20 Pon, 17 Lis, 09:31:01, IST 2014]
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
ProductBean [P3 60 Mon, 17 listopada, 09:31:01, IST 2014]
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
******** PO GRUPOWANIE WEDŁUG ID PRODUKTU ******
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
ProductBean [P1 30 Mon, 17 listopada, 09:31:01, IST 2014]
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
Fasola Produktowa [P2 20 Pon, 17 Lis, 09:31:01, IST 2014]
ProductBean [P3 60 Mon, 17 listopada, 09:31:01, IST 2014]
******** PO GRUPOWANIU WEDŁUG CENY ******
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
Fasola Produktowa [P2 20 Pon, 17 Lis, 09:31:01, IST 2014]
Fasola Produktowa [P1 20 Pon 17 Lis 09:31:01 IST 2014]
ProductBean [P1 30 Mon, 17 listopada, 09:31:01, IST 2014]
ProductBean [P3 60 Mon, 17 listopada, 09:31:01, IST 2014]