使用与Java 7 编译器的streamsupportjavac我遇到以下编译错误:
接口java8.util.stream.Stream <T>中的[ERROR]方法映射不能应用于给定类型; 需要[ERROR]:java8.util.function.Function <?超级java.lang.Object,?扩展R>
[ERROR]发现:<anonymous java8.util.function.Function <java.lang.Integer,java.lang.String >> [ERROR]原因:没有类型变量的实例R存在以便参数类型<anonymous java8.util.function.Function <java.lang.Integer,java.lang.String >>符合形式参数类型java8.util.function.Function <?超级java.lang.Object,?扩展R>
我的代码是
List<Object> listSum = RefStreams.iterate(0, new UnaryOperator<Integer>() {
@Override
public Integer apply(Integer n) {
return n+1;
}
}).limit(10000).map(new Function<Integer,String>() {
@Override
public String apply(Integer n) {
return String.format("%04d", n);
}
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我想知道该怎么做以及为什么会出现这个错误?谢谢
有人可以解释一下为什么第一个代码示例没有保存我在地图上用.map所做的更改,但第二个代码示例呢?
第一个代码示例:
stringIntegerMap.entrySet().stream()
.map(element -> element.setValue(100));
Run Code Online (Sandbox Code Playgroud)
第二个代码示例:
stringIntegerMap.entrySet().stream()
.map(element -> element.setValue(100))
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
另外,为什么第二个代码示例只打印值而不是整个元素(键+值)?
如何使用Java Stream迭代List中的2个循环.
public class ArrayStreams {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(7);
list.add(2);
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
System.out.println("i :" + list.get(i) + "J :" + list.get(j));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何将此代码转换为Java Stream.请帮忙!
import java.util.stream.*;
import java.util.*;
class TestInfiniteStream {
public static void main(String args[]) {
IntStream infiniteStream = new Random().ints();
IntStream sortedStream = infiniteStream.sorted();
sortedStream.forEach(i -> System.out.println(i));
}
}
Run Code Online (Sandbox Code Playgroud)
编译并执行此代码后,出现以下错误。
Exception in thread "main" java.lang.IllegalArgumentException: Stream size exceeds max array size
Run Code Online (Sandbox Code Playgroud)
在无限流上排序流是否失败?
为什么以下java 8代码在第二次调用get()时显示错误?
Stream<String> aStream = Stream.concat(Stream.of("A"), Stream.of("B"));
String a = stream.findFirst().get();
String b = stream.findFirst().get();
Run Code Online (Sandbox Code Playgroud)
"aStream"流应该看到两个值:"A"和"B".但是,在第一个元素已被消耗之后尝试读取任何内容
java.lang.IllegalStateException: stream has already been operated upon or closed
Run Code Online (Sandbox Code Playgroud)
这不是Java 8中的错误吗?首先,为什么不消耗的Stream.of()-created流返回Optional与isPresent()==false?第二,为什么不Stream.concatenate()正确连接这样的Stream.of()创建流?
我正在尝试将 Student 对象列表转换为一个映射,其中键是整数(即 Student 对象的 rollno 字段),Value 是 Student 对象本身。
以下是我编写的代码:
package fibonacci;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class MApfor {
public static void main(String[] args) {
List<Student> maplist=new ArrayList<>();
maplist.add(new Student(1, "pavan"));
maplist.add(new Student(2, "Dhoni"));
maplist.add(new Student(3, "kohli"));
maplist.forEach(System.out::println);
Map<Integer,Student> IS=new HashMap<>();
IS = maplist.stream().collect(Collectors.toMap(a -> a.getRollNo,a);
}
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试写最后一行时,即
IS = maplist.stream().collect(Collectors.toMap(a -> a.getRollNo,a);
Run Code Online (Sandbox Code Playgroud)
我无法检索 rollNo 字段,eclipse 没有显示建议,即每当我键入 a.get 将 rollNo 分配给键时,我无法这样做。
请提出我面临的问题。
package fibonacci;
public class Student {
public int rollNo; …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以使用单个Java Steam语句打印出集合中的唯一元素并包括每个元素的计数。
例如,如果我有:
List<String> animals = Arrays.asList("dog", "cat", "pony", "pony", "pony", "dog");
Run Code Online (Sandbox Code Playgroud)
我想打印流:
cat - 1
dog - 2
pony - 3
Run Code Online (Sandbox Code Playgroud) 我有一张Map<String, List<String>>地图,我希望从中提取一个List<String>包含地图中所有字符串列表的字符串.我想使用java8流语法.
在旧的Java我会做:
List<String> all = new LinkedList<String>();
for (String key: map.keySet()) {
all.addAll(map.get(key));
}
return all;
Run Code Online (Sandbox Code Playgroud)
如何使用流?
我有一个用Java编写的servlet,它接受多部分形式的发布文件,该文件需要保存在MongoDb / GridFS中。我已经有为此工作的代码。
这是一个代码片段,显示了如何使用org.apache.commons.fileupload包完成此操作。它几乎不占用内存,因为它不会在内存中保留太多数据。
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(req);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
toProcess.put(name, Streams.asString(stream));
} else {
String fileName = item.getName();
String contentType = item.getHeaders().getHeader("Content-Type");
GridFSUploadOptions options = new GridFSUploadOptions()
// .chunkSizeBytes(358400)
.metadata(new Document("content_type", contentType));
ObjectId fileId = gridFSFilesBucket.uploadFromStream(fileName, stream, options);
fileIds.add(fileId);
fileNames.add(fileName);
}
Run Code Online (Sandbox Code Playgroud)
我还需要计算所有文件的sha1哈希值。阿帕奇digestutils可以用于此目的。它具有一种可以计算流中的sha1的方法:
我的问题是此方法完全消耗了流。我需要将输入流分为两部分。将一部分输入到SHA-1计算中,另一部分输入到GridFS存储桶中。
我怎样才能做到这一点?我当时正在考虑创建自己的“管道”,该管道具有输入和输出流,可以转发所有数据,但可以实时更新摘要。
我只是不知道如何开始写这样的管道。
鉴于代码:
public Statement methodCallByName(MethodDeclaration method, String string) {
List<ExpressionStatement> expressions = method.getBody().statements().stream()
.filter(s -> s instanceof ExpressionStatement)
.map(ExpressionStatement.class::cast)
.collect(Collectors.toList());
return null;
}
Run Code Online (Sandbox Code Playgroud)
我在Eclipse Oxygen中有以下错误:
请注意,根据JDT文档statements()返回a .List
怎么了?
java-stream ×9
java ×8
java-8 ×4
collections ×1
count ×1
dictionary ×1
digest ×1
distinct ×1
java-7 ×1
lambda ×1
stream ×1