Als Ergebnis eines Programmierquiz bei der Arbeit erhielten zwei Personen die gleiche Antwort
Ein Programmierquiz wie FizzBuzz. Dieses Mal werden wir die in CodeEval aufgeführten Probleme herausfordern.
CodeEval - https://www.codeeval.com/browse/30/
Der Eingabewert ist eine Liste von zwei Arten sortierter Zahlen (in aufsteigender Reihenfolge). Die Liste wird durch ";" getrennt, und die Zahlen in der Liste werden durch "," getrennt. Gibt doppelte Zahlen in zwei Arten von Listen aus, die durch "," getrennt sind.
Eingabewertprobe
1,2,3,4;4,5,6
20,21,22;45,46,47
7,8,9;8,9,10,11,12
Ausgabewertprobe
4
(Keine Leistung)
8,9
Ein solches Bild
java SetIntersection "1,2,3,4;4,5,6"
Es ist in vielerlei Hinsicht ein Einzeiler geworden. (Modularisierung oder Ausnahmebehandlung werden nicht berücksichtigt.)
import java.util.Arrays;
import java.util.stream.Collectors;
public class SetIntersection {
public static void main(String[] args) {
System.out.println(String.join(",",
Arrays.stream(args[0].split(";")[0].split(","))
.filter(leftString -> Arrays.stream(args[0].split(";")[1].split(",")).anyMatch(leftString::equals))
.collect(Collectors.toList())));
}
}
Verwenden Sie "Filter", um nur diejenigen einzugrenzen und aufzulisten, die die Bedingungen von "anyMatch" erfüllen. Der Rest ist die Ausgabe mit "String.join", getrennt durch Kommas.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SetIntersection {
private static final String SEPARATOR_LIST = ";";
private static final String SEPARATOR_NUMBER = ",";
public static void main(String[] args) {
Stream<String> leftSide = Arrays.stream(args[0].split(SEPARATOR_LIST)[0].split(SEPARATOR_NUMBER));
List<String> rightSide = Arrays.asList(args[0].split(SEPARATOR_LIST)[1].split(SEPARATOR_NUMBER));
System.out.println(String.join(SEPARATOR_NUMBER,
leftSide.filter(leftString -> rightSide.stream().anyMatch(leftString::equals))
.collect(Collectors.toList())));
}
}
Die Antwort bei der Arbeit wurde in die Methode mit "for" und "if" und die Methode mit "stream" unterteilt. Ersteres ist natürlich schneller als Ersteres.
Recommended Posts