Algorithmus für Arbeit mit fehlenden Listenelementen?

berndoa

Top Contributor
Hallo, ich programmiere zwar in Python aber meine Frage geht eher generell in Richtung Hilfe beim Algorithmus verfassen/generelles Vorgehen:
Ich habe eine Klasse Trade_Order, deren Objekte unter Anderem Attribute wie order_id, message_id und tp_type haben. (alle Strings, tp_type wird nur den Wert "tp1" oder "tp2" haben)

Wir fangen mit einer leeren Lsite an, der wir nach und nach Trade_order Objekte hinzufügen.
Aus gottgegebenen Gründen fügen wir aber entweder ein Objekt mit tp_type="tp1" hinzu.
oder wir fügen 2 objekte hinzu, die die selbe Message id haben und wo eins "tp1" und das andere "tp2" hat (das objekt mit "tp2" wird nahc dem "tp1" objekt hinzugefügt.
es kann also nicht vorkommen das snur ein objekt mit "tp2" ohne zugehöriges "tp1" objekt eingefügt wird.

Ausserdem sind die order ids der objekte aufsteigend gemäß hinzufügereihefolge (jedes neu hinzugefügte objekt hat eine order id größer aller anderen order ids in der liste).

Diese gesamtliste nennen wir A.


Nun sei eine liste mit order ids gegeben bzw die mit den ids generierte teilliste von A
nennen wir sie B.

Meine Sache ist nun:
Es kann sein dass in der A Liste 2 zueinander gehörige objekte (gleiche message id, eins "tp1" und eins mit "tp2") vorkommen.
aus gründen aber in der B Liste nur noch das "tp2" objekt drin ist und das "tp1" Objekt fehlt.

Falls so ein Fall vorliegt, will ich (mit den infos aus der A Liste) vom "tp1" objekt den wert einer variable "takeprofit" haben und vom "tp2" Objekt die order id.
Diese 2 sachen werden als tupel in einer neuen Liste gespeichert.

Ausserdem wird in der A liste das "tp1" objekt gelöscht und beim "zp2" objekt eine bestimmte methode mit eben gespeicherten infos ausgeführt
sowie ein attriut angepasst.

kurzum die 2 attribute aus tp1 und tp2 objekt auslesen, tp1 objekt rausschmeissen, tp2 objekt mit jenen infos als parameter aufrufen und dessen attribut anpassen.

Klingt umständlich, ist es auch.
Nun scheitere ich aber dran wie ich mit den gegebenen A und B Listen
1. alle paarweise objekte in der A lsite finde (also gleiche message id, eins hat "tp1" eins hat "tp2"), wo in der B liste nur noch das "tp2" objekt existiert aber nicht mehr das "tp1" objekt.

und dann halt auf den "tp1" und "tp2" objekt die genannten Sachen mache.

Komme auf keinen sinnvolllen listen durhclauf algorithmus, gerade weil ich ja elemente teilweise während der iteration aus der A lsite rausschmeisse und so, komme ich nicht weiter.
Auch ob ich eine oder beide lsite vielleicht erst nahc message id, dann nach "tp1"/"tp2"srtieren sollte um mir das suchen dann leichter zu machen, keine Ahnung.
Verzweifle dran und kann mir im Kopf keine sinnvolle Vorgehensweise denken.

Hat Jemand einen guten Plan?
 

mihe7

Top Contributor
Hier mal ein Ansatz, wobei der eigentliche Part in der Methode perform zu finden ist. Der besteht aus zwei Schritten.

  1. In der B-Liste alle tp2-Einträge ohne zugehörigen tp1-Eintrag finden. Dazu werden zuerst die Message-IDs der B-Liste (dort orders) gesammelt, deren tpType gleich tp1 ist. Danach werden alle Message-IDs der B-Liste gesammelt, deren tpType gleich tp2 ist aber nicht in der tp1-Liste enthalten ist. Aus Gründen der Geschwindigkeit werden HashSets verwendet. Der Schritt benötigt lineare Laufzeit.
  2. Die A-Liste (allOrders) wird nach Message-ID gruppiert, die daraus reultierende Map enthält als Key die Message-ID und als Value die Liste aller zur Message-ID gehörigen TradeOrders. Von jedem Eintrag in der Map benötigen wir nur den Wert, d. h. die Liste, aber nur, wenn genau 2 Einträge enthalten sind (tp1 und tp2). Dann wird noch sichergestellt, dass die Message-ID in der tp2-Liste aus Schritt 1 enthalten ist und das wars.

Java:
public class Test {
    private static Random rand = new Random(4L);

    record TradeOrder(String orderId, String messageId, String tpType, BigDecimal takeprofit) {
        void someFunction(String someOrderId, BigDecimal profit) {
            System.out.println("someFunction called on " + this + " with " + someOrderId + ", " + profit);
        }
    }

    public void perform(List<TradeOrder> allOrders, List<TradeOrder> orders) {
        Set<String> tp1Ids = new HashSet<>(getMessageIdsByTpType(orders, "tp1").collect(Collectors.toSet()));
        Set<String> tp2Ids = new HashSet<>(getMessageIdsByTpType(orders, "tp2")
                .filter(Predicate.not(tp1Ids::contains))
                .collect(Collectors.toSet()));

        allOrders.stream()
                .collect(Collectors.groupingBy(TradeOrder::messageId)).values().stream()
                .filter(list -> list.size() == 2)
                .filter(list -> tp2Ids.contains(list.get(0).messageId()))
                .forEach(list -> process(allOrders, list));
    }

    private void process(List<TradeOrder> allOrders, List<TradeOrder> pair) {
        int first = "tp1".equals(pair.get(0).tpType()) ? 0 : 1;
        TradeOrder tp1Order = pair.get(first);
        TradeOrder tp2Order = pair.get(1 - first);

        BigDecimal profit = tp1Order.takeprofit();
        String orderId = tp2Order.orderId();

        allOrders.remove(tp1Order);
        tp2Order.someFunction(orderId, profit);
    }

    private Stream<String> getMessageIdsByTpType(List<TradeOrder> orders, String tpType) {
        return orders.stream().filter(b -> tpType.equals(b.tpType())).map(TradeOrder::messageId);
    }

    public static void main(String[] args) {
        List<TradeOrder> allOrders = createOrders(10);
        List<TradeOrder> orders = new ArrayList<>(allOrders.stream().filter(e -> rand.nextBoolean()).toList());

        System.out.println("All orders: ");
        allOrders.stream().forEach(System.out::println);

        System.out.println("\norders: ");
        orders.stream().forEach(System.out::println);

        // damit auch die Reihenfolge keine Rolle spielt, 
        // einmal durchmischen
        Collections.shuffle(allOrders);
        Collections.shuffle(orders);

        new Test().perform(allOrders, orders);
    }

    private static List<TradeOrder> createOrders(int n) {
        List<TradeOrder> orders = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String messageId = String.valueOf(rand.nextInt());
            BigDecimal profit = BigDecimal.valueOf(rand.nextDouble()).setScale(2, RoundingMode.HALF_UP);
            orders.add(new TradeOrder(String.valueOf(rand.nextInt()), messageId, "tp1", profit));
            if (rand.nextBoolean()) {
                profit = BigDecimal.valueOf(rand.nextDouble()).setScale(2, RoundingMode.HALF_UP);
                orders.add(new TradeOrder(String.valueOf(rand.nextInt()), messageId, "tp2", profit));
            }
        }
        return orders;
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
C Algorithmus für Array Allgemeine Java-Themen 9
S Algorithmus für Sudoku Allgemeine Java-Themen 17
F Algorithmus für Sortierung gesucht Allgemeine Java-Themen 15
D Algorithmus für die Erkennung fehlerhafter Eingaben Allgemeine Java-Themen 4
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
F Q - Learning Algorithmus Bug Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
N A*-Algorithmus Allgemeine Java-Themen 5
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
F Methoden Algorithmus zur Gegnerfindung (Turnier) Allgemeine Java-Themen 9
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
B Algorithmus Krankenhausbelegung Allgemeine Java-Themen 17
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4
G k nearest neighbor algorithmus Allgemeine Java-Themen 7
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
K Algorithmus Allgemeine Java-Themen 10
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J fällt euch ein Algorithmus ein? Allgemeine Java-Themen 4
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
T Algorithmus verbessern Allgemeine Java-Themen 10
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3
U Ford-Fulkerson Algorithmus gesucht Allgemeine Java-Themen 1
U Dijkstra Algorithmus gesucht Allgemeine Java-Themen 4
I hash-algorithmus Allgemeine Java-Themen 9
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben