Ich habe ein besonderes Problem der Reorganisation einer Reihe von Daten, die ich habe. Derzeit meine Daten in einem Arraylist der folgenden Klasse gehalten:Collapsing ArrayListe von Objekten basierend auf zwei Attributen, um eindeutige Mengen zu generieren
class MyRecord {
private String location;
private ArrayList<EmployeeCategory> employeeCategory;}
class EmployeeCategory {
private String category;
private String employee;
}
wie ArrayList<MyRecord> myRecordList;
Der Dateninhalt Ich habe sieht wie folgt aus (ich es in irgendeiner JSONlike Struktur vorstelle):
{location: "Houston", {category: "purchasing", employee: "John"}},
{location: "Houston", {category: "sales", employee: "John"}},
{location: "Houston", {category: "purchasing", employee: "Hank"}},
{location: "Houston", {category: "field operations", employee: "Hank"}},
{location: "Houston", {category: "sales", employee: "Jane"}},
{location: "Houston", {category: "purchasing", employee: "Jane"}},
{location: "Houston", {category: "human resources", employee: "Jane"}},
{location: "Dallas", {category: "purchasing", employee: "Matt"}},
{location: "Dallas", {category: "field operations", employee: "Matt"}},
{location: "Dallas", {category: "human resources", employee: "Todd"}},
{location: "Dallas", {category: "field operations", employee: "Todd"}},
{location: "Dallas", {category: "sales", employee: "Todd"}},
{location: "Dallas", {category: "purchasing", employee: "June"}},
{location: "Dallas", {category: "human resources", employee: "June"}}
ich möchte, dass die Daten vereinfachen und sie in die Arraylist der folgenden Klasse reorganisieren:
class MyCollapsedRecord {
private String location;
private String name;
private ArrayList<String> employee;
}
so dass die Daten in der folgenden Form sein würde:
{location:"Houston", category:"purchasing", employee:["John", "Hank", "Jane"]},
{location:"Houston", category:"sales", employee:["John", "Jane"]},
{location:"Houston", category:"field operations", employee:["Hank"]},
{location:"Houston", category:"human resources", employee:["Jane"]},
{location:"Dallas", category:"purchasing", employee:["Matt", "June"]},
{location:"Dallas", category:"field operations", employee:["Matt", "Todd"]},
{location:"Dallas", category:"human resources", employee:["Todd", "June"]},
{location:"Dallas", category:"sales", employee:["Todd"]}
denke ich, beste Strategie eindeutige Datensätze auf den Paaren der Lage und Kategorie basieren Erzeugung würde bedeuten. Ich habe versucht, LinkedHashSet beim Überschreiben von Equals und HashValue-Methoden zu verwenden, aber ich glaube, dass meine Datenstrukturen für diese Art von Anwendung ein wenig zu komplex sind. Ich denke, dass ich einen manuelleren Ansatz mit verschachtelten For-Schleifen wie dieser algorithm haben müsste, aber ich konnte meinen Kopf nicht umschließen, um es zu meinem komplexeren Fall zu ändern.
Hier ist mein Versuch einer Reorganisation bisher:
ArrayList<MyRecord> myRecordArrayList = new ArrayList<>();
//Load data to myRecordArrayList
ArrayList<CollapsedRecord> myCollapsedArrayList = new ArrayList<>();
for (int i = 0; i < myRecordArrayList.size(); i++) {
boolean isDistinctLocation = false;
for (int j=0; j < i; j++) {
if (myRecordArrayList.get(i).getLocation().equals(myRecordArrayList.get(j).getLocation())) {
isDistinctLocation = true;
for (int m = 0; m < myRecordArrayList.get(i).getEmployeeCategory().size(); m++) {
boolean isDistinctCategory = false;
for (int n = 0; n < m; n++) {
if (myRecordArrayList.get(i).getEmployeeCategory().get(m).getCategory().equals(myRecordArrayList.get(i).getEmployeeCategory().get(n).getCategory())) {
isDistinctCategory = true;
CollapsedRecord tempCollapsedRecord = new CollapsedRecord();
tempCollapsedRecord.setLocation(myRecordArrayList.get(i).getLocation()); tempCollapsedRecord.setCategory(myRecordArrayList.get(i).getEmployeeCategory().get(m).getCategory());
}
}
}
break;
}
}
if (!isDistinctLocation) {
System.out.println(myRecordArrayList.get(i).getLocation());
}
}
Wie kann es geschehen?
* I beste Strategie denken eindeutige Datensätze basieren würde bedeuten Erzeugung auf die Paare von Ort und Kategorie. *: In der Tat. Was ist der Code, den du versucht hast? –
Ich habe meinen Code hinzugefügt. Es wurde ziemlich verwirrt in meinem Kopf, dass ich eine Pause brauche, bevor ich es wieder ansehe. – Naci