Attualmente sto provando a convertire codice Java in codice Scala. La sfida è assicurarsi che il codice Scala convertito non finisca per fare qualcosa di molto inefficiente se confrontato con quello originale di Java. Ad es. quando si cerca di convertire il codice seguente:Singolo iterazione => Raccolte di output multiple da Java a Scala
class Person {
String name;
Integer age;
Character gender;
}
public class TestJava {
public static void main(String[] args) {
final List<Person> persons = new ArrayList<>();
final List<Person> males = new ArrayList<>();
final List<Person> aNames = new ArrayList<>();
final List<Person> seniors = new ArrayList<>();
for (final Person p: persons) {
if (p.gender == 'm') {
males.add(p);
}
if (p.age >= 60) {
seniors.add(p);
}
if (p.name.startsWith("a")) {
aNames.add(p);
}
}
}
}
Poiché si basa su Java mutazione, questo codice sembra logico. Ma, ora voglio convertire questo al suo equivalente Scala senza looping sulla raccolta più volte (3 volte in questo caso).
posso ovviamente usare mutabile List
dalla libreria Scala e ottenere la stessa cosa come fatta da Java, ma si stava chiedendo se fosse possibile generare più raccolte da una sequenza data/raccolta in uno Scala modo funzionale/senza iterando sulla collezione per n
volte dove n
è il conteggio dei criteri. Grazie in anticipo!
+1, ma wow, sembra complesso. Questo genere di cose è abbastanza comune in Scala-terra? – sasuke
Un approccio più pragmatico è quello di utilizzare collezioni mutabili all'interno del metodo, come mutable.ListBuffer, quindi chiamare result() e restituire le raccolte immutabili. Non è puramente funzionale, ma più leggibile e intuitivo. –
Sì, sto accettando questa risposta perché questo è quello che ho chiesto ma andrà con l'approccio mutevole. Questo perché sembra che non ci dovrebbero essere problemi finché la mutazione è contenuta in un metodo. – sasuke