À la suite d'un quiz de programmation au travail, deux personnes ont obtenu la même réponse, alors notez
Un quiz de programmation comme FizzBuzz. Cette fois, nous allons contester les problèmes répertoriés dans CodeEval.
CodeEval - https://www.codeeval.com/browse/30/
La valeur d'entrée est une liste de deux types de nombres triés (par ordre croissant).
La liste est séparée par «;» et les nombres de la liste sont séparés par «,».
Produit des nombres en double dans deux types de listes, séparés par ,
.
Échantillon de valeur d'entrée
1,2,3,4;4,5,6
20,21,22;45,46,47
7,8,9;8,9,10,11,12
Exemple de valeur de sortie
4
(Aucune sortie)
8,9
Une telle image
java SetIntersection "1,2,3,4;4,5,6"
Il est devenu une ligne à bien des égards. (Aucune considération n'est accordée à la modularisation ou au traitement des exceptions)
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())));
}
}
Utilisez filter
pour affiner et lister uniquement ceux qui remplissent les conditions de ʻanyMatch. Le reste est de sortir avec
String.join` séparé par des virgules.
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())));
}
}
La réponse au travail a été divisée en la méthode utilisant «for» et «if» et la méthode utilisant «stream». Inutile de dire que le premier est plus rapide que le premier.
Recommended Posts