Lampda funktion ?

kantaki

Mitglied
Hallo,

ich bin ein umsteiger von c++ auf java und habe eine frage.

in c++ kann man einen vector mit einer eigenen funktion sortieren. zb

Java:
				 partial_sort(tenwps.begin(),tenwps.end(),tenwps.end(),
                     [&](const data& p1,const data& p2)
                     {
                       return p1.dist_p2(startPoint)<p2.dist_p2(startPoint);
                     });

wobei in tenwps 10 wegpunkte gepspeichert sind und die funktion dist_p2 mir die distanz von p1 zu 2 errechnet. nun kann ich die waypoints so sortieren das der nächstliegende wegpunkt auf tenwps[0] liegt und der am weitest entfernte wegpunkt auf tenwp[9] liegt.

wie wäre das equivalent zu diesem code in java ?

welchen container sollte ich nehmen? arraylist?

vielleicht könntet ihr mir auch einen beispiel code geben.

ich hoffe ihr könnt mir helfen danke =).
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ein direktes analogon zu "partial_sort" gibt es nicht. Das eigentliche Sortieren mit einer eigenen Vergleichsfunktion würde am einfachsten mit einer (Array)List und einem eigenen Comparator gehen (siehe auch http://www.java-forum.org/allgemeines/39510-arrays-listen-sortieren.html ).

WENN es aber viele Elemente sind, und man nur "wenige" größte Elemente braucht, wäre das natürlich Zeitverschwendung, und man sollte sich ggf. eine eigene partialSort-Methode basteln.

EDIT: Aber... es scheint als würdest du auch ALLE sortieren, und bräuchtest demnach eigentlich gar nicht partial_sort, sondern sort ?! ???:L
 

andiv

Bekanntes Mitglied
Java:
				 partial_sort(tenwps.begin(),tenwps.end(),tenwps.end(),
                     [&](const data& p1,const data& p2)
                     {
                       return p1.dist_p2(startPoint)<p2.dist_p2(startPoint);
                     });

Java:
				 List<Data> tenwps = new ArrayList<Data>();
				 // Liste füllen...
				 Collections.sort(tenwps, new Comparator<Data>() {
				     @Override
				     public int compare(final Data p1, final Data p2) {
				         return p1.dist_p2(startPoint) - p2.dist_p2(startPoint);
				     }
				 };
 

kantaki

Mitglied
kannst du mit den code mal in ein beispiel schreiben ? ich sitze jetzt seit mehreren stunden dran und bekomme ihn nicht kompiliert.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
sind das nicht 7 korrekte Beispiel-Codezeilen?
die Data-Objekte mit der Distanz-Berechnung solltest du nun wirklich selber bauen,
das hat doch mit der Sortierungsfrage nicht mehr direkt zu tun, das ist Vorarbeit ;)

dann ist wegen 'partial' noch die Frage, evtl. nur ein paar Elemente der Ausgangslise in eine neue zu kopieren, diese zu sortieren und wieder zurück,
ist das deine Frage? eigentlich auch leicht,

also es gibt verschiedene Teilbereiche, wonach richtet sich deine Frage, was hast du alles schon fertig?
nur 'macht ihr mal' ist nicht der richtige Ansatz ;)

poste doch was bei dir nicht kompiliert + Fehler dazu
 

kantaki

Mitglied
Also mit der Vorarbeit bin ich fertig und es funktioniert auch "noch" alles wie es soll, obwohl ich auch noch nicht weiß ob ich einen stack over flow irgentwann bekomme.

undzwar

Java:
 List<Data> tenwps = new ArrayList<Data>();
                 // Liste füllen...
                 Collections.sort(tenwps, new Comparator<Data>() {
                     @Override
                     public int compare(final Data p1, final Data p2) {
                         return p1.dist_p2(startPoint) - p2.dist_p2(startPoint);
                     }
                 };

anstatt

Java:
List<Data> tenwps = new ArrayList<Data>();

benutze ich meine test.wpArray ( Test.class)
nebenbei ist es keine list sondern eine ArrayList, aus irgenteinem Grund durfte ich das gestern nicht machen.
Java:
public int

das ersetze ich durch public double

Java:
return p1.dist_p2(startPoint) - p2.dist_p2(startPoint);
da ist ein kleiner fehler drin, müsste eigentlich return p1.dist_p2(startPoint) < p2.dist_p2(startPoint);

aber er nimmt den code nicht an er sagt zum beispiel das der returnwert int sein muss, wenn ich es auf int stelle soll er boolean sein und so weiter. ( ich nutze eclipse)

irgentwas habe ich extrem falsch gemacht. ich starte gerade mal meinen laptop damit ich mehr über die fehler sagen kann
EDIT: so habe ihn implementiert

Java:
Collections.sort(test.wpArray, new Comparator<Data>() {
             @Override
             public double compare(final Data p1, final Data p2) {
                 return p1.dist_p2(startPoint) < p2.dist_p2(startPoint);
             }
         });
er unterstreicht mir double soll zu int werden und das return will einen booleanwert weil er ja vergleicht. hmm



Java:
// TEXT DATEI
//x y z
1,2,3
4,5,6
7,8,9

Java:
class Data {

	public double X;
	public double Y;
	public double Z;

	public double dist_p2(Data p2) {
		double xd = Math.abs(X - p2.X);
		double yd = Math.abs(Y - p2.Y);
		double zd = Math.abs(Z - p2.Z);
		return xd * xd + yd * yd + zd * zd;
	}

}
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

class Read {

	public ArrayList<Data> wpArray = new ArrayList<Data>();

	public void input() throws FileNotFoundException {
		File inputFile = new File("C:\\Users\\kanta\\Desktop\\hallo.txt");
		Scanner scanner = new Scanner(inputFile);
		Data o;

		while (scanner.hasNextLine()) {
			o = new Data();
			String row = scanner.nextLine();

			String[] splitter = row.split(",");

			o.X = Double.parseDouble(splitter[0]);
			o.Y = Double.parseDouble(splitter[1]);
			o.Z = Double.parseDouble(splitter[2]);
			wpArray.add(o);
		}
	}
}
Java:
import java.io.FileNotFoundException;
import java.util.Collections;
import java.util.Comparator;

class Test {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 */
	public static void main(String[] args) throws FileNotFoundException {
		Read test = new Read();
		test.input();
		Data startPoint = new Data();
		startPoint.X = 5;
		startPoint.Y = 5;
		startPoint.Z = 5;
		// HIER SOLL SORTIERT WERDEN

	}
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
na das sind doch viel mehr Informationen zu denen man auch viel mehr sagen kann,

das Interface von Comparator ist fest vorgegeben, man muss sich schon für einen konkreten Typ entscheiden,
weder kann man in Java int, double oder boolean zurückgeben, welche alles als boolean interpretiert werden (0 oder nicht 0)
noch gibt es mehrere Comparator zur Wahl, nur einen mit int,
Collections.sort() funktioniert nur exakt so, daran ist nichts zu rütteln,

nur mit boolean hättest du eh zu wenig Möglichkeiten, du musst ja normalerweise drei Zustände beschreiben, kleiner, gleich oder größer
(ich will eigentlich gar nicht so viel aus dem Lehrbuch wiederholen ;) )

also int steht fest, der noch fehlende Gedanke ist, deine interne Berechnung umzustellen,
du kannst ja gerne erstmal double oder boolean ausrechnen, dass dann aber umwandeln,
z.B.
Java:
boolean kleiner = ..;
if (kleiner) return -1;
return 1;
schon hast du ints als Rückgabe, ob -1 und 1 oder andersrum durch Testen prüfen, vergesse ich immer
 

kantaki

Mitglied
okay danke ich werde es heute nachmittag mal testen !

Edit
habe es gerade einfach trotzdemal geschrieben und es scheint zu funktionieren ! =)

Java:
Collections.sort(test.wpArray, new Comparator<Data>() {
			@Override
			public int compare(final Data p1, final Data p2) {
				return (p1.dist_p2(startPoint) < p2.dist_p2(startPoint)) ? -1
						: 1;
			}
		});
okay bekomme bei bestimmten werten einen error
Java:
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
	at java.util.TimSort.mergeLo(Unknown Source)
	at java.util.TimSort.mergeAt(Unknown Source)
	at java.util.TimSort.mergeCollapse(Unknown Source)
	at java.util.TimSort.sort(Unknown Source)
	at java.util.TimSort.sort(Unknown Source)
	at java.util.Arrays.sort(Unknown Source)
	at java.util.Collections.sort(Unknown Source)
	at Test.main(Test.java:20)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
I Generische Funktion Java Basics - Anfänger-Themen 3
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
M toDouble Funktion Java Basics - Anfänger-Themen 3
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
X Ackermannsche Funktion Java Basics - Anfänger-Themen 32
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
D Funktion nur 1 Rueckgabewert Java Basics - Anfänger-Themen 9
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
R Ackermann Funktion Java Basics - Anfänger-Themen 2
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
E Contain-funktion überlisten Java Basics - Anfänger-Themen 4
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
S Funktion in Klasse auslagern Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
D Nullstellen einer Funktion 3. Grades mit Horner Schema Java Basics - Anfänger-Themen 6
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
D Funktion gibt Dimension zurück Java Basics - Anfänger-Themen 11
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
B Zugriffe in einer Klasse / Funktion Java Basics - Anfänger-Themen 9
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
J Array innerhalb einer Funktion mehrfach iniatilisieren Java Basics - Anfänger-Themen 4
T Lambda-Funktion bei Binärbäumen Java Basics - Anfänger-Themen 13
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
S Threads run - Funktion wird nur einmal ausgeführt. Java Basics - Anfänger-Themen 8
B Anwender soll mathematische Funktion eingeben können, Einfachster Fnktionsplotter Java Basics - Anfänger-Themen 4
R If Funktion funktioniert nicht :P Java Basics - Anfänger-Themen 3
H Funktion in Hintergrund und Vordergrund ausführen Java Basics - Anfänger-Themen 11
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Funktion eines Stacks Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
T Klassen Funktion in einem Funktionsaufruf definieren Java Basics - Anfänger-Themen 3
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
X Eval-Funktion mit Variable Java Basics - Anfänger-Themen 2
T Screenreader Funktion Java Basics - Anfänger-Themen 2
S Wertetabelle einer Funktion f : R -> R Java Basics - Anfänger-Themen 1
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
shiroX OOP Java Funktion implementieren Java Basics - Anfänger-Themen 3
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
F Funktion immer zur vollen Stunde? Java Basics - Anfänger-Themen 3
S ResultSet close() in funktion nich möglich. Java Basics - Anfänger-Themen 8
C Meine erste Funktion Java Basics - Anfänger-Themen 12
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
G OOP Aus Objekt auf Funktion der erzeuger Klasse zugreifen? Java Basics - Anfänger-Themen 11
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
M Interface als Konstruktorparameter nutzen, um Funktion zu plotten Java Basics - Anfänger-Themen 14
NR_EIGHT Benutzereingabe in Funktion verpacken Java Basics - Anfänger-Themen 4
J Funktion definieren und ausfuehren Java Basics - Anfänger-Themen 27
D Loop Funktion für Robot Klasse Java Basics - Anfänger-Themen 5
N mathematische Funktion Java Basics - Anfänger-Themen 29
R Programm verstehen, Funktion Java Basics - Anfänger-Themen 4
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
O Nicht Standard Form boolesche Funktion in Standard Form parsen Java Basics - Anfänger-Themen 3
F Sleep Funktion Java Basics - Anfänger-Themen 12
S Euklid Funktion Java Basics - Anfänger-Themen 8
H Funktion mit Argumenten Java Basics - Anfänger-Themen 5
Q Random Funktion JButtons Java Basics - Anfänger-Themen 6
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
C Probleme mit replaceAll Funktion Java Basics - Anfänger-Themen 9
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben