我有一个注释处理器,我需要获取与元素关联的类,以便我可以检索其声明的字段:
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
String className = null;
String packageName = null;
String fqClassName = null;
List<String> fields = new LinkedList<String>();
for (Element elem : roundEnv.getElementsAnnotatedWith(FieldConstant.class)) {
if (elem.getKind() == ElementKind.CLASS) {
// Encrypt encrypt = elem.getAnnotation(Encrypt.class);
// String message = "annotation found in " + elem.getSimpleName();
// processingEnv.getMessager().printMessage(Kind.NOTE, message);
TypeElement classElement = (TypeElement) elem;
PackageElement packageElement = (PackageElement) classElement.getEnclosingElement();
className = classElement.getSimpleName().toString();
for(Field field : classElement.getClass().getDeclaredFields()){
do something...
}
.....
Run Code Online (Sandbox Code Playgroud)
显然,className.getClass() …
我的 groupingBy 方法有问题。我举个例子:假设有一个List<Person>wherePerson.class和City.classare like this
class Person{
String name;
String surname;
City city;
}
class City{
String name;
String postalCode;
}
Run Code Online (Sandbox Code Playgroud)
我会将列表分组city.postalcode并执行如下操作:
List<Person> myList = ...some persons here...
Map<City,List<Person>> groupMap = myList.stream().collect(
Collectors.groupingBy(person -> person));
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,因为groupingBy不知道如何按对象分组。我会做类似的事情Collectors.groupingBy(person -> person.city.postalcode),但是这样会产生一个类型的地图Map<String,List<Person>>,而不是 Map<City,List<Person>>
谢谢你的帮助。
更新
为了groupingBy在类上使用,它必须简单地正确实现 equals并且hashcode