Ho già letto il post relativo a this. Quando si tratta di operazioni con le corde, i flussi sembrano attrarre una grande quantità di cerimonie. Se si desidera analizzare una stringa come flusso di caratteri su cui si desidera eseguire alcune operazioni, è necessario convertirli in uno IntStream
prima, mappare a Object
, quindi trasmettere lo int
a char
, infine il numero di serie da char
a String
e quindi restituirlo.Gli stream Java 8 non sono pensati per essere utilizzati con caratteri e stringhe?
E la gente dice che la programmazione in stile imperativo ha una cerimonia in testa. Per favore correggimi se sto sbagliando completamente. La mia intenzione non è di prendere in giro ma di capire meglio i flussi di Java perché generalmente li apprezzo.
// Simple method which encrypts all chars in a string
String input = "Hel!lo";
String result = input.chars() // Need to convert into an IntStream
.mapToObj(e -> Character.toUpperCase((char) e)) // Need to map to Object (!) and then cast to char
.map(CryptoMath::encryptChar) // Calling the encryption
.map(String::valueOf) // Need to cast to String again...
.collect(joining("")); // Finally done
System.out.println(result);
Si può semplicemente considerare 'char' come un' int'. Ma questo problema è in realtà un retaggio dell'intero problema dei tipi primitivi di Java. –
Beh, se lo faccio ho bisogno di cambiare ogni metodo con i parametri char da prendere invece, che è odore di codice secondo me. A quale problema si riferisce a primitive? Hai qualche link? – AdHominem
Basta Google. Non puoi usare i generici con i primitivi. Dovevano scrivere lo stesso codice per 'Stream', 'IntSteam' ** e **' LongStream'. Hanno scelto di non creare un 'CharStream'. Questa è un'ancora che trattiene il moderno Java; e non uno che può essere tagliato. –