Implementieren Sie die SQL GROUP BY-Funktion in Java mithilfe von Comparator. Der Comparator vergleicht Ihre Spaltendaten und sortiert sie. Wenn Sie sortierte Daten behalten, die als gruppierte Daten aussehen, z. B. wenn Sie dieselben wiederholten Spaltendaten haben, sortieren Sie sie nach dem Sortiermechanismus, indem Sie dieselben Daten auf einer Seite behalten, und suchen Sie dann nach anderen Daten, bei denen es sich um unterschiedliche Daten handelt. Dies wird indirekt als Gruppierung derselben Daten angesehen.
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;
}
// at this point all a.b,c,d are equal... so return "equal"
return 0;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
}
class CompareByProductPrice implements Comparator<ProductBean> {
@Override
public int compare(ProductBean p1, ProductBean p2) {
// this mean the first column is tied in thee two rows
if (p1.price > p2.price) {
return 1;
}
if (p1.price < p2.price) {
return -1;
}
return 0;
}
public boolean equals(Object obj) {
// TODO Auto-generated method stub
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) {
// TODO Auto-generated method stub
return super.equals(obj);
}
}
}
Die Ausgabe erfolgt hier für die oben genannte ProductBean-Liste. Die GROUP BY-Kriterien werden hier angezeigt. Wenn Sie die Eingabedaten sehen, die eine Liste der ProductBean an Collections.sort (Liste, Objekt des Komparators für Ihre erforderliche Spalte) erhalten, wird dies basierend auf Ihrer Komparatorimplementierung sortiert und Sie können die GROUPED-Daten in der folgenden Ausgabe sehen. Hoffe das hilft...
******** VOR DER GRUPPIERUNG DER EINGABEDATEN SCHAUT DIESER WEG ******
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 30 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P2 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P3 60 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
******** NACH DER GRUPPE NACH PRODUCT_ID ******
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 30 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P2 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P3 60 Mon Nov 17 09:31:01 IST 2014]
******** NACH PREISGRUPPE ******
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P2 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 20 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P1 30 Mon Nov 17 09:31:01 IST 2014]
ProductBean [P3 60 Mon Nov 17 09:31:01 IST 2014]