Problema Optional<>

di il
4 risposte

Problema Optional<>

Salve stavo svolgendo qualche esercizio per esercitarmi sugli Stream e mi sono imbattuto in questo problema: ho le seguenti Classi

public class Person {
    private final String name;
    private final Optional<String> city;
    private final double income;
    private final Set<String> jobs;

    public Person(final String name, final String city, final double income, String... jobs) {
        this.name = name;
        this.city = Optional.of(city);
        this.income = income;
        this.jobs = new HashSet<>(Arrays.asList(jobs));
    }

    public String getName() {
        return this.name;
    }

    public Optional<String> getCity() {
        return this.city;
    }

    public double getIncome() {
        return this.income;
    }

    public Set<String> getJobs() {
        return Collections.unmodifiableSet(jobs);
    }

public class UsePerson {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        final List<Person> plist = new ArrayList<>();
        plist.add(new Person("Mario" ,"Cesena" ,20000 , "Teacher"));
        plist.add(new Person("Rino" ,"Forlì" ,50000 , " Professor"));
        plist.add(new Person("Lino" ,"Cesena" ,110000 , "Professor", "Dean"));
        plist.add(new Person("Ugo", "Cesena", 20000, "Secretary"));
        //plist.add(new Person("Marco", null, 4000, "Contractor"));
        
        final double res = plist.stream().filter(p -> p.getCity().isPresent())
                .filter(p -> p.getCity().get().equals("Cesena")).peek(System.out::println)
                .mapToDouble(Person::getIncome).sum();
        System.out.println(res);

    }

}
Il problema nasce quando "decommento" l'ultima persona da aggiungere (Marco), quel null lancia un NullPointerException.

4 Risposte

  • Re: Problema Optional<>

    Ciao!

    penso che non possa passare null.
    ma dovresti prevedere più costruttori, con eventuali dati che non passi.

    ma ripeto, potrei non aver detto una cosa del tutto corretta.
  • Re: Problema Optional<>

    Bonda ha scritto:


    Il problema nasce quando "decommento" l'ultima persona da aggiungere (Marco), quel null lancia un NullPointerException.
    Documentazione di Optional.of:

    public static <T> Optional<T> of(T value)

    value - the value to be present, which must be non-null


    Mi pare auto-esplicativo.
  • Re: Problema Optional<>

    fermat ha scritto:


    ciao!

    penso che non possa passare null.
    ma dovresti prevedere più costruttori, con eventuali dati che non passi.

    ma ripeto, potrei non aver detto una cosa del tutto corretta.
    Si anche io avevo pensato a più costruttori, e chiamare Optional.empty() in caso in cui non inserisca la città.
    Strano che mi dia l'errore dato che avevo copiato il codice dalle Slide del Prof.
    In ogni caso grazie per la disponibilità
  • Re: Problema Optional<>

    andbin ha scritto:


    Bonda ha scritto:


    Il problema nasce quando "decommento" l'ultima persona da aggiungere (Marco), quel null lancia un NullPointerException.
    Documentazione di Optional.of:

    public static <T> Optional<T> of(T value)

    value - the value to be present, which must be non-null


    Mi pare auto-esplicativo.
    ahah sì direi di sì.. ma siccome è il codice delle slide del Prof. volevo chiarire. Grazie

    Non è necessario un altro Costruttore, basta mettere Optional.ofNullable(city) e se passo null viene chiamato Optional.empty()
Devi accedere o registrarti per scrivere nel forum
4 risposte