Eigene Stream Methoden implementieren

n01sp

Mitglied
Hey,
also ich habe momentan die Aufgabe eigene Methoden zu den Streams in Java 8 zu schreiben.
Ich habe auch was geschrieben, das mit Sicherheit falsch ist.

Java:
package de.streams;


import java.util.ArrayList;
import java.util.Optional;
import java.util.function.BinaryOperator;
import java.util.function.Predicate;
import java.util.function.ToDoubleFunction;


public class StreamArrayList<T> extends ArrayList<T> {

    public StreamArrayList(){
        super();
    }
   
    public StreamArrayList(ArrayList<T> dataset){
        super(dataset);
    }
   

    public     StreamArrayList<T> filter(Predicate<T> p) {
        StreamArrayList<T> l = new StreamArrayList<T>();
        @SuppressWarnings("unchecked")
        StreamArrayList<T> filtered =  l.stream().filter(p);
        return filtered;
    }

Meine eigentliche große Problemtaik besteht darin, dass ich wenn ich es ohne stream filtere keine StreamArrayList als Rückgabewert rauskriege sondern halt ieine Liste.
 
Soo habe jetzt eine Lösung aber immer noch ein Problem und zwar die Liste in die klasse zu bekommen.

Java:
package de.streams;


import java.util.ArrayList;
import java.util.Optional;
import java.util.function.BinaryOperator;
import java.util.function.Predicate;
import java.util.function.ToDoubleFunction;

import de.tuberlin.snet.prog2.ue06.fileio.CSVDataEntry;


public class StreamArrayList<T> extends ArrayList<T> {
    ArrayList<CSVDataEntry> dataset;
    public StreamArrayList(){
        super();
    }
   
    public StreamArrayList(ArrayList<T> dataset){
        super(dataset);
    }
   

    public     StreamArrayList<T> filter(Predicate<T> p) {
        StreamArrayList<T> result =  new StreamArrayList<T>();
          for (T element: result) {
            if (p.test(element)) {
              result.add(element);
            }
          }
          return result;
        }
   
   
    public StreamArrayList<Double> mapToDouble(ToDoubleFunction<T> dFunct){
        StreamArrayList<Double> result =  new StreamArrayList<Double>();
          for (T element: result) {
            dFunct.applyAsDouble(element);
              result.add(element);
            }
          return result;
          }

Java:
package de.fileio;


import java.io.IOException;
import java.util.ArrayList;

import de.tuberlin.snet.prog2.ue06.streams.StreamArrayList;

public class CSVMain {

    public static void main(String[] args) {
        CSVManager csvManager = new CSVManager("C:/EWR_Ortsteile_Berlin_2015.csv");
        ArrayList<CSVDataEntry> csvData = new ArrayList<CSVDataEntry>();
        try {
            csvData = csvManager.readCSV();
        } catch (IOException e) {
            e.printStackTrace();
        }

       
        StreamArrayList<CSVDataEntry> streamDataset = csvManager.getDatasetStream();
        // TODO Use your implemented filter, map, reduce, limit and count functions
        /*Double result = streamDataset.filter(p -> p.geschlecht ==1 && p.altersgruppe.equals("25_30") && p.hauefigkeit> 200)
                     .mapToDouble(e -> e.getHauefigkeit())
                     .reduce((n1, n2) -> n1 + n2)
                     .get();*/
        System.out.println( streamDataset.filter(p -> p.geschlecht ==1 && p.altersgruppe.equals("25_30") && p.hauefigkeit> 200));
        //  System.out.println("Number of German men between 20-25 in populated areas: "+result);
       
       
       
       
        try {
            csvManager.writeDataToCSV(csvData, "Results.csv");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 
Wie sieht denn deine Aufgabenstellung aus? Es werden nirgends Streams verwendet und die Vererbung sieht mir hier auch nicht richtig aus.
 
Bevor wir uns mit den Streams von Java 8 und deren Funktionalitäten beschäftigen, wollen wir
selbst einige der nützlichen Methoden implementieren. In der Vorlage finden Sie die Klasse
StreamArrayList, die von der Klasse ArrayList erbt. Erweitern Sie diese Klasse mit
folgenden Methoden.
Filtern
Implementieren Sie die Methode filter(Predicate<T> p). Diese Methode
soll basierend auf dem gegebenen Prädikat, den Stream entsprechend filtern.
Map
Implementieren Sie die Methode mapToDouble(ToDoubleFunction<T> dFunct).
Diese Methode soll die Map-Funktion auf jedes Element des Streams anwenden. In unserem
Fall soll ein neuer Stream entstehen, der nur Elemente des Typs Double beinhaltet.
Reduce
Implementieren Sie die Methode reduce(BinaryOperator<T> bo). Diese
Methode soll den Datensatz auf Grundlage des BinaryOperator auf einen einzigen Wert
reduzieren.
! Hinweis: Schauen Sie sich dafür den Pseudocode für die Reduce-Funktion in der Java
8 Dokumentation2 von Oracle an.
Limit
Implementieren Sie die Methode limit(long max). Diese Methode soll einen
Stream zurückgeben, der auf den übergebenen Parameter gekürzt wurde.
Count
Implementieren Sie die Methode count(), welche die Anzahl der Elemente in einem
Stream zurückgibt
 

Zurück
Oben