小编Dmy*_*tro的帖子

为现有Stream添加新值

是否有一种向现有添加新值的好方法Stream?我能想象的就像这样:

public <T> Stream<T> addToStream(Stream<T> stream, T elem ) {
    List<T> result = stream.collect(Collectors.toList());
    result.add(elem);
    return result.stream();
}
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一些更简洁的东西,我可以在lambda表达中使用而没有冗长.

当我尝试实施PECS原则时出现了另一个问题:

public <T> Stream<? super T> addToStream(Stream<? super T> stream, T elem ) {
    List<? super T> result = stream.collect(Collectors.toList()); //error
    result.add(elem);
    return result.stream();
}
Run Code Online (Sandbox Code Playgroud)

看起来像通配符不起作用Stream.collect,我想知道为什么.提前致谢.

java wildcard java-8

74
推荐指数
3
解决办法
3万
查看次数

可选vs抛出异常

是不是因为Java 1.8返回Optional对象比抛出异常更可取?我越来越多地看到这样的代码:

  public Optional<?> get(int i) {
        // do somtething
        Object result = ...
        Optional.ofNullable(result);
    }
Run Code Online (Sandbox Code Playgroud)

而不是这个:

public Object get(int i) {
        if(i<0 || i>=size) {
            throw new IndexOutOfBoundsException("Index: " + i + ". Size: " + size);
        }
        // do somtething
        Object result = ...
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

是否意味着我们需要忘记旧方法并使用新方法?什么地方Optional适合?

java optional java-8

19
推荐指数
3
解决办法
8726
查看次数

嵌套通配符

发现了有关使我烦恼的无限制通配符的事实。例如:

public class Test {

      private static final Map<Integer, Map<Integer, String>> someMap = new HashMap<>();

      public static void main(String[] args) {
         getSomeMap();
      }

      static Map<?, Map<?, ?>> getSomeMap() {
         return someMap;  //compilation fails
      }
}
Run Code Online (Sandbox Code Playgroud)

尽管可以使用Map<?, ?>Map<?, Map<Integer, String>>返回类型,但失败。

有人可以告诉我确切原因吗?提前致谢。


更新资料

我认为,对于此问题,我似乎理解并最简单的解释(忽略所有这些复杂的规则)是Capture Conversion(link)中的最后一个注释:Capture conversion is not applied recursively.

java generics wildcard

5
推荐指数
1
解决办法
186
查看次数

更简洁的Builder模式?

当我在Josh的Bloch书中审查Builder模式时,我提出了更简单的实现,但我不确定它是否合适.例如:

public class Test {
    public static void main(String[] args) {
        Numbers first = new Numbers.Builder().setD(3.14).build();
        System.out.println(first);
        Numbers second = new Numbers.Builder().setI(17).setF(1.24F).build();
        System.out.println(second);
        System.out.println(first);
    }
}

final class Numbers {
    private int i;
    private long l;
    private float f;
    private double d;

    private Numbers() {}


    public static class Builder {
        private final Numbers instance = new Numbers();

        public Builder setI(int i) {
            instance.i = i;
            return this;
        }

        public Builder setL(long l) {
            instance.l = l;
            return this; …
Run Code Online (Sandbox Code Playgroud)

java builder

5
推荐指数
1
解决办法
273
查看次数

使用简单的 spring-data-rest 项目得到 404 错误

我正在尝试在我的 spring-mvc 项目上配置 spring-data-rest,但是每次我输入 url 以访问我的存储库信息的 json 时 - 它返回 404。看起来它没有看到我的 spring-data-完全休息注释/依赖

这是我的 pom.xml

<groupId>com.konan</groupId>
<artifactId>libsupport</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<name>LibSupport</name>
<description>Library Support System</description>

<properties>
    <org.springframework.version>4.2.0.RELEASE</org.springframework.version>
</properties>

<dependencies>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.8.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-webmvc</artifactId>
        <version>2.4.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.hateoas</groupId>
        <artifactId>spring-hateoas</artifactId>
        <version>0.17.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.10.Final</version>
    </dependency>


    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java rest spring spring-data spring-data-rest

5
推荐指数
1
解决办法
3820
查看次数

模糊的varargs方法

这是一个不编译的代码示例:

public class Test {
    public static void main(String[] args) {
        method(1);
    }

    public static void method(int... x) {
        System.out.println("varargs");
    }

    public static void method(Integer... x) {
        System.out.println("single");
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么这些方法含糊不清吗?先感谢您.

java methods variadic-functions

4
推荐指数
2
解决办法
979
查看次数

Spring 的 @Scheduled 实际上是如何工作的?

我始终认为,@Scheduled作品代理所述全豆,同样的方式@Async@Transactional等做。所以我很惊讶以下内容就像一个魅力:

    @Component
    public static class Bean {

        @Scheduled(fixedRate = 1000)
        private void scheduled() {
            System.out.println("Yo");
        }
    }
Run Code Online (Sandbox Code Playgroud)

他们有没有改变什么,或者从一开始就是这样?谢谢。

java aop spring

4
推荐指数
1
解决办法
67
查看次数

如何对无限通量进行排序?

我有一个Flux由专用Processor含义生成的无限实例,每个元素都是通过发出的sink.nextReceiver如果重要的话,元素来自反应式 Kafka )。问题是,每次我尝试做一些有用的事情时sortFlux它只会给出一个空的结果。这也适用于reduce

难道我做错了什么?

编辑

这是一个更具体的例子,它给出了一个空的Flux

Flux.<Integer>create(sink -> {
  sink.next(1);
  sink.next(2);
  sink.next(3);
  sink.next(4);
})
    .sort() // If I remove this everthing works as expected
    .log()
    .subscribe();
Run Code Online (Sandbox Code Playgroud)

谈到我的具体情况,这是我所拥有的简化版本:

    FluxProcessor<Message, Message> processor = ReplayProcessor.<Message>createTimeout(Duration.ofDays(1)).serialize();
    FluxSink<Message> sink = processor.sink();
    Flux<Message> pipeline = processor;

    kafka.receive()
        .log()
        .map(ReceiverRecord::value)
        .subscribe(sink::next);

    return pipeline; // Work with the pipeline later on
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试无论是.sort.reducepipeline它总是导致空Flux

java reactive-programming project-reactor spring-webflux

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