Le contexte statique ne peut pas accéder aux éléments non statiques dans les collecteurs
J'ai un groupe d'élèves. Tout d'abord je tiens à les regrouper par les marques. Alors je veux plus de groupe de ces ensembles dans la même nom des élèves.
Map<Integer,Map<String,List<String>>> groupping = students.stream()
.collect(Collectors.groupingBy(Student::getMarks,
Collectors.mapping(Student::getName,Collectors.toList())));
J'obtiens un message d'erreur indiquant que,
Non méthode statique ne peut pas être référencé à partir d'un contexte statique.
Oui. Je suis bien conscient que je ne peut pas se référer à une non-méthode statique sans disposer d'une instance. Mais avec tous ces flux d'opérations, je suis peu confus en ce qui a mal tourné vraiment.
Plutôt que de comment résoudre ce problème; j'ai vraiment envie de savoir ce qui se passe ici. L'un de vos entrées sont appréciées!
Parce que Si j'écris ci-dessous groupement est tout à fait valable;
Map<Integer,List<Student>> m = students.stream().
collect(Collectors.groupingBy(Student::getMarks));
Voici mon Student.java classe (Dans le cas où si vous en avez besoin)
public class Student {
private String name;
private int marks;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
public Student(String name, int marks) {
this.name = name;
this.marks = marks;
}
@Override
public String toString() {
return name + ':' + marks ;
}
}
source d'informationauteur Jude Niroshan
Vous devez vous connecter pour publier un commentaire.
Malheureusement, le message d'erreur “Non méthode statique ne peut pas être référencé à partir d'un contexte statique.” est juste un lieu-support pour tout problème d'incompatibilité de type, lorsque la méthode références sont impliqués. Le compilateur n'ont pas réussi à déterminer le problème.
Dans votre code, le type de cible
Map<Integer, Map<String, List<String>>>
ne correspond pas au type de résultat de la combinaison de collecteur qui estMap<Integer, List<String>>
mais le compilateur n'essayez pas de le déterminer (stand-alone) type de résultat, comme l' (imbriqué) générique des invocations de méthode intégrant la méthode des références nécessite le type de cible pour la résolution de la méthode de référence. Donc il n'a pas de rapport d'une incompatibilité de type de la mission, mais un problème avec la résolution de la méthode de référence.Le code correct est tout simplement
Je pense que Holger a donné une bonne explication sur l'erreur et pourquoi il n'a pas beaucoup de sens dans un run.
Compte tenu de votre objectif, je pense que c'est la solution dont vous avez besoin.
Ce serait tout simplement de vous donner une liste des étudiants d'abord regroupées par marque, puis par nom. :))