J'essaye de terminer ma méthode "priorité" qui devrait renvoyer la priorité
de la Tâche
. et faites-le retourner null
si le nom spécifié n'existe pas (comme indiqué dans le main). J'ai essayé d'itérer dans ArrayList
, mais je ne pense pas que ce soit la façon de le faire. Quelqu'un peut-il m'aider?
class Task { public static final ArrayList<Task> ALL_TASKS = new ArrayList<>(); private String name; private Integer priority; public Task(String name, Integer priority) { this.name = name; this.priority = priority; ALL_TASKS.add(this); } @Override public String toString() { return "name: " + this.name + "\tpriority: " + this.priority; } } class Main { public static void main(String[] arguments) { new Task("Clean", 5); new Task("Dishwash", 4); new Task("Study", 1); System.out.println(Task.priority("Dishwash")); System.out.println(Task.priority("Vacuumclean")); } }
4 Réponses :
Essayez ceci:
public static Integer priority(String name) { return ALL_TASKS.stream() .filter(task -> task.name.equals(name)) .map(task -> task.priority) .findFirst() .orElse(null); }
Ou utilisez Stream-API:
public static Integer priority(String name) { for(Task task : ALL_TASKS) { if(task.name.equals(name)) { return task.priority; } } return null; }
cela ne fonctionnera pas, car le nom
de la tâche
est privé
@noname la méthode est membre de la classe Task
, donc privé n'a pas d'importance.
public static Integer priority(String name) { for(int i = 0; i < ALL_TASKS.size(); i++){ if(ALL_TASKS.get(i).getName().equals(name)) return ALL_TASKS.get(i).getPriority(); else return null; // but if using Java 8 Option<Task> would be better } } This is the example which I would use. It is not tested but it give you idea what create and the way of thinking.Also in my solution I assume you also create getName() and getPriority() methods for your Task
L'API Java Stream offre une approche plus pratique et plus efficace pour l'itération et le traitement des éléments d'une collection.
class Task { public static final ArrayList<Task> ALL_TASKS = new ArrayList<>(); public static Integer priority(String name) { List<Task> result = ALL_TASKS.stream().filter(task-> (task.name.equals(name))).collect(Collectors.toList()); if(result.isEmpty()) { return null; } else { return result.get(0).priority; } } private String name; private Integer priority; public Task(String name, Integer priority) { ALL_TASKS.add(this); this.name = name; this.priority = priority; } public String toString() { return "name: " + this.name + "\tpriority: " + this.priority; } } class Main { public static void main(String[] arguments) { new Task("Clean", 5); new Task("Dishwash", 4); new Task("Study", 1); System.out.println(Task.priority("Dishwash")); System.out.println(Task.priority("Vacuumclean")); } }
Une option stockerait votre Si une tâche Liste code> en tant que carte code> à la place, à l'aide des tâches
nom code> comme clé
code> est composée uniquement de
nom code> et
priorité code>, il est encore plus simple p>
Pourquoi avez-vous supprimé une partie du code essentielle pour comprendre le
main
?Dupliqué? Voir Stackoverflow.com/questions/17526608/...
Vous ne devriez pas retourner NULL ici, facultatif serait meilleur choix