Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
du könntest beide Listen nach denselben Kriterien sortieren und dann die Objekte an denselben Indizes vergleichen. Sind sie gleich, läuft die Schleife weiter. Sind sie unterschiedlich gibst du ein false zurück. Ist die Schleife bis zum Schluss durchgelaufen, gibst du ein true zurück.
Nee hab ich nicht, weil ich weder weiß, was in deinen Listen steht noch nach was du sie sortieren willst.
Zum Sortieren kannst du den...
...BubbleSort nehmen (klein, leicht, nicht so schnell)
...QuickSort nehmen (größer, komplizierter, schneller)
...andere nehmen, die ich nicht kenne. Ich glaube, es gibt noch den MergeSort.
Google einfach mal nach Sortieralgorythmen und such dir einen aus.
Sortieren ist hier nicht notwendig.
Ich hab mal etwas Code geschrieben.
Die Methode getEqualElements findet all Elemente, die in beiden Listen vorkommen. getEqualElements2 ist für sehr lange Listen gedacht und verwendet ein HashSet um den Vergleich zu beschleunigen.
Damit das Ganze korrekt funktioniert muss die equals Methode in der WorkActivity Klasse überschrieben werden. Für getEqualElements2 muss auch noch WorkActivity.hashCode überschrieben werden.
Java:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
class WorkActivity {
String activity;
public WorkActivity(String activity) {
this.activity = activity;
}
@Override
public boolean equals(Object o) {
if(o instanceof WorkActivity) {
return ((WorkActivity)o).activity.equals(this.activity);
} else {
return false;
}
}
@Override
public int hashCode() {
return activity.hashCode();
}
@Override
public String toString() {
return "WorkActivity " + activity;
}
}
class Employee {
List<WorkActivity> workActivity = new ArrayList<>();
String name;
Employee(String name) {
this.name = name;
}
void addWorkActivity(WorkActivity wa) {
workActivity.add(wa);
}
public List<WorkActivity> getEmployeeWorkActivity() {
return new ArrayList<>(workActivity);
}
@Override
public String toString() {
return "Employee " + name;
}
}
public class Test {
static <T> List<T> getEqualElements(List<T> list1, List<T> list2) {
ArrayList<T> result = new ArrayList<>();
for(T elem: list1) {
if(list2.contains(elem)) result.add(elem);
}
return result;
}
static <T> List<T> getEqualElements2(List<T> list1, List<T> list2) {
HashSet<T> set = new HashSet<>(list2);
ArrayList<T> result = new ArrayList<>();
for(T elem: list1) {
if(set.contains(elem)) result.add(elem);
}
return result;
}
public static void main(String[] args) {
List<WorkActivity> selectedWorkActivityList = new ArrayList<>();
selectedWorkActivityList.add(new WorkActivity("schlafen"));
selectedWorkActivityList.add(new WorkActivity("Mittagspause"));
selectedWorkActivityList.add(new WorkActivity("rumstehen"));
Employee employee = new Employee("internet");
employee.addWorkActivity(new WorkActivity("schlafen"));
employee.addWorkActivity(new WorkActivity("rumstehen"));
employee.addWorkActivity(new WorkActivity("Fragen stellen"));
List<WorkActivity> equalElems = getEqualElements(selectedWorkActivityList, employee.getEmployeeWorkActivity());
System.out.println(equalElems);
}
}
Aber dann nimmst du dir einen Wert und vergleichst ihn mit allen anderen. Wenn du ihn wiederfindest machst du mit dem nächsten Wert weiter. Das klingt nach BruteForce.
Deshalb hatte ich ja auch vorgeschlagen ein HashSet für lange Listen zu verwenden. Das ist dann fast genau so schnell wie die Lösung mit dem Sortieren.