/* * User: sid * Date: Feb 1, 2002 * Time: 4:22:44 PM */ package de.fhro.inf.fp; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public abstract class FP { /** * Führt Funktion f auf jedem Listenelement aus * @param f unäre Funktion * @param xs Liste * @return ausgeführte Funktion für Verkettungen */ public static UnaryFunction forEach(UnaryFunction f, List xs) { Iterator i = xs.iterator(); while (i.hasNext()) f.execute(i.next()); return f; } /** * Führt Funktion f auf jedem Listenelement aus und kopiert Ergebnis in eine neue Liste * @param f unäre Funktion * @param xs Eingebeliste * @return Ausgabeliste */ public static List map(UnaryFunction f, List xs) { List result; result = new ArrayList(); Iterator i = xs.iterator(); while (i.hasNext()) result.add(f.execute(i.next())); return result; } /** * Ermittelt alle Element einer Liste die ein unäres Prädikat erfüllen * @param p unäres Prädikat * @param xs Liste * @return Liste der Elemente die Prädikat erfüllen */ public static List filter(UnaryPredicate p, List xs) { List result = new ArrayList(); Iterator i = xs.iterator(); while (i.hasNext()) { Object element = i.next(); // wenn 2x i.next() benutzt wird, passt das dann? if (p.execute(element)) { result.add(element); } } return result; } /** * Überprüft ob mindestens ein Element einer Liste ein unäres Prädikat erfüllt * @param p unäres Prädikat * @param xs Liste * @return true falls ein Element Prädikat erfüllt */ public static boolean some(UnaryPredicate p, List xs) { Iterator i = xs.iterator(); boolean result = false; while (i.hasNext()) { Object element = i.next(); if (p.execute(element)) { result = true; break; } } return result; } /** * Überprüft ob alle Elemente einer Liste ein unäres Prädikat erfüllt * @param p unäres Prädikat * @param xs Liste * @return true falls alle Elemente Prädikat erfüllt */ public static boolean every(UnaryPredicate p, List xs) { Iterator i = xs.iterator(); boolean result = true; while (i.hasNext()) { Object element = i.next(); // falls nur ein Element falsch ist, sofort result auf falsch setzen und abbrechen if (!p.execute(element)) { result = false; break; } } return result; } /** * Berechnet sukzessive Binäre Funktion von Startwert initval und allen Elementen einer Liste * @param f binäre Funktion * @param xs Liste * @param initval Startwert * @return Endergebnis */ public static Object reduce(BinaryFunction f, List xs, Object initval) { Object result = initval; Iterator i = xs.iterator(); while (i.hasNext()) { result = f.execute(result, i.next()); } return result; } }