Lambda wyrazeń, implementacja class Optional

0

Witam mam za zadanie stworzyc klase optional na wzor zwyklej.
Musze spowodować zeby to zadzialalo

    Integer num = null;
    String res = Maybe.of(num).map(n -> "Wartość wynosi: "+n)
                      .orElse("Wartosc niedostepna");
    System.out.println(res);

ma mi zwracać "Wartość niedostepna".

implementacje funkcji wygladaja tak:

	public Maybe(T x){
		data = x;
	}
	
	public static <T> Maybe<T> of(T x){
		Maybe<T> maybe = new Maybe<>(x);
		return maybe;
	}
	Maybe<T> map(Function<T,T> func){
		Maybe<T> newM = null;
		if(data != null)
			newM = new Maybe<T>(func.apply(data));
		return newM;
	}

	T orElse(T defVal){
		if (data != null) {
			return defVal;
        }else
        	return data;
	}

I
Wiem ze num jest Integerem a w lambdzie przekazuje Stringa.
Jakas wskazówka?
Nie mogę zmieniać maina:)

1

Twoje map jest tak straszne, że nawet lepiej żebyś nie został piekarzem :-). Zwłaszcza za tego zwracanego nulla.


<U>  Maybe<U> map(Function<T,U> func){
        if(data != null)
           return new Maybe<U>(func.apply(data));
        else 
          return new Maybe<U>(null);
    }

1

Jarek mnie uprzedził:

import java.util.function.Function;

public class Maybe<T> {

    private T data;

    public Maybe(T x){
        data = x;
    }

    public static <T> Maybe<T> of(T x){
        Maybe<T> maybe = new Maybe<>(x);
        return maybe;
    }
    <R> Maybe<R> map(Function<T,R> func){
        if(data != null)
            return new Maybe<R>(func.apply(data));
        return new Maybe<R>(null);
    }

    T orElse(T defVal){
        if (data == null) {
            return defVal;
        } else {
            return data;
        }
    }
}

W ostatniej metodzie masz buga, powinieneś zwracać data jak nie jest nullem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1