Qual è la definizione di anti-pattern nel contesto di java 8 - Streams?

-6

Sto leggendo questa eccellente serie di articoli sul flusso.

Una definizione di anti-pattern nel contesto di java 8 -Stream può essere un flusso che non produce un risultato valido utilizzando parrallel e un risultato valido utilizzando il calcolo sequenziale?

Esempio dell'articolo:

Un buon modello: (il flusso può essere calcolato in sequenza e in parallelo)

Set<String> uniqueStrings = strings.stream().collect(
    HashSet::new,
    HashSet::add,
    HashSet::addAll);

An anti-pattern: (il flusso deve essere calcolato solo in sequenza e non in parallelo)

Set<String> set = new HashSet<>();
strings.stream().forEach(s -> set.add(s));
    
posta Stav Alfi 23.05.2017 - 20:52
fonte

1 risposta

3

Hai frainteso il motivo per cui questo viene chiamato anti-pattern.

Can a definition to anti-pattern in the context of java 8 -Stream will be a stream that does not produce a valid result using parrallel and a valid result using sequential calculation?

Non produrre un risultato valido sarebbe un bug. Non un anti-pattern.

Il problema parallelo e sequenziale riguarda esclusivamente l'efficienza. L'unico modo in cui questo problema causa un errore è se le risorse sono sopraffatte.

Di cosa si tratta scrivere un codice sufficientemente flessibile da poter essere ottimizzato automaticamente per sfruttare un ambiente parallelo. Il codice sequenziale non può.

Non esiste un anti-modello senza contesto e scopo. Ecco che vuole che il codice sia in grado di sfruttare il parallelismo. Entrambi gli esempi di codice funzionano altrettanto bene su un singolo core in un singolo thread.

    
risposta data 24.05.2017 - 06:27
fonte

Leggi altre domande sui tag