是否有一种向现有添加新值的好方法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 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适合?
发现了有关使我烦恼的无限制通配符的事实。例如:
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.
当我在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) 我正在尝试在我的 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) 这是一个不编译的代码示例:
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)
有人能告诉我为什么这些方法含糊不清吗?先感谢您.
我始终认为,@Scheduled作品代理所述全豆,同样的方式@Async,@Transactional等做。所以我很惊讶以下内容就像一个魅力:
@Component
public static class Bean {
@Scheduled(fixedRate = 1000)
private void scheduled() {
System.out.println("Yo");
}
}
Run Code Online (Sandbox Code Playgroud)
他们有没有改变什么,或者从一开始就是这样?谢谢。
我有一个Flux由专用Processor含义生成的无限实例,每个元素都是通过发出的sink.next(Receiver如果重要的话,元素来自反应式 Kafka )。问题是,每次我尝试做一些有用的事情时sort,Flux它只会给出一个空的结果。这也适用于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或.reduce将pipeline它总是导致空Flux。