小编use*_*888的帖子

使用Annotation处理器获取annotatted类的声明字段

我有一个注释处理器,我需要获取与元素关联的类,以便我可以检索其声明的字段:

@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() …

java annotations processor

2
推荐指数
1
解决办法
1212
查看次数

Java 8 Stream - 按类分组

我的 groupingBy 方法有问题。我举个例子:假设有一个List<Person>wherePerson.classCity.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

java grouping java-8 java-stream

-1
推荐指数
1
解决办法
2575
查看次数

标签 统计

java ×2

annotations ×1

grouping ×1

java-8 ×1

java-stream ×1

processor ×1