相关疑难解决方法(0)

通过谓词限制流

是否有Java 8流操作限制(可能是无限的)Stream直到第一个元素无法匹配谓词?

在Java 9中,我们可以使用takeWhile下面的示例来打印小于10的所有数字.

IntStream
    .iterate(1, n -> n + 1)
    .takeWhile(n -> n < 10)
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

由于Java 8中没有这样的操作,以一般方式实现它的最佳方法是什么?

java java-8 java-stream

179
推荐指数
9
解决办法
6万
查看次数

使用Java Reflection检索继承的属性名称/值

我有一个Java对象'ChildObj',它从'ParentObj'扩展而来.现在,如果可以使用Java反射机制检索ChildObj的所有属性名称和值,包括继承的属性?

Class.getFields为我提供了公共属性数组,Class.getDeclaredFields为我提供了所有字段的数组,但它们都没有包含继承的字段列表.

有没有办法检索继承的属性呢?

java reflection introspection

118
推荐指数
7
解决办法
7万
查看次数

Java8流式类层次结构

我正在慢慢学习Java 8的新功能,并试图找到一种以流方式处理类层次结构(从子级到父级)的方法。

例如,在类或其父级上找到注释。

在Java 8之前,我会这样完成:

public static <T extends Annotation> T getAnnonationOn(Class<?> type, Class<T> annType) {
    Class<?> t = type;
    T annot = null;
    while (t != null && annot == null) {
        annot = t.getAnnotation(annType);
        t = t.getSuperclass();
    }
    return annot;
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望以一种更加“功能性的编程”方式来做到这一点。我找不到比使用以下递归连接流更好的方法:

import java.lang.annotation.Annotation;
import java.util.stream.Stream;

public static <T extends Annotation> T getAnnonationOn(Class<?> type, Class<T> annType) {
    return ClassIterator.streamSuperclass(type)
        .map(t -> t.getAnnotation(annType))
        .filter(a -> a != null)
        .findFirst()
        .orElse(null);
}

public static class ClassIterator {
    public static Stream<Class<?>> …
Run Code Online (Sandbox Code Playgroud)

reflection java-8 java-stream

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

标签 统计

java ×2

java-8 ×2

java-stream ×2

reflection ×2

introspection ×1