我想使用下面的spliterator()方法保留数组元素的顺序.
但是,当我运行这个程序时,它正在生成4 2 1 3输出.
public class Test1 {
public static void main(String[] args) {
m1().anyMatch(e -> {
System.out.println(e);
return false;
});
}
private static LongStream m1() {
return StreamSupport.longStream(Arrays.spliterator(new long[] { 1, 2, 3, 4 }), true);
}
}
Run Code Online (Sandbox Code Playgroud)
请检查并告知我这是否可能.
我有一个Foo包含两个重要属性的列表,Bar bar和Baz baz.实例可以共享Bar值但具有唯一的Bazs.
我想将此List转换为Map,Baz以便共享a的所有实例的唯一值Bar放在映射到该共享的Set中Bar.
Map<Bar, Set<Baz>> m = new HashMap<>();
for (Foo foo : fooRepository.findAll()) {
if (m.containsKey(foo.bar)) {
m.get(foo.bar).add(foo.baz);
} else {
Set<Baz> set = new HashSet<>();
set.add(foo.baz);
m.put(foo.bar, set);
}
}
Run Code Online (Sandbox Code Playgroud)
我自己的功能印章尚未证明完成任务.我试图将两者reduce和collectList一起尝试但在尝试将不同的参数实现为lambdas时因类型问题而被绊倒.
尝试使用Collect
m = fooRepository.findAll().stream().collect(new HashMap<Bar, Set<Baz>>(), (m, foo)->m.merge(Foo::getBaz, s->s.add(foo.getBar()));
Run Code Online (Sandbox Code Playgroud)
不完整,编译器无法确定m或foo和Foo :: getBaz的类型.
Reduce不起作用,因为它不允许累加器与元素具有不同的值.
我的情况很简单.
我有一个列表,我想异步地对每个项目执行逻辑.
当所有线程都完成后,我想调用一个紧密的连接.
像这样:
bucketsList.parallelStream().forEach(t -> {
//some logic
});
try {
RestApi.getInstance().closeClientConnection();
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让closeConnection部分等待并行Stream完成遍历所有对象?
编辑:我不能使用,CountDownLatch因为我不知道我将在bucketsList中有多少项目
我有2个对象列表:
List<User>
List<UserResource>
Run Code Online (Sandbox Code Playgroud)
对于User类:
public class User {
private int id;
private String name;
private String address;
**SETTERS & GETTERS**
}
Run Code Online (Sandbox Code Playgroud)
对于UserResource类:
public class UserResource {
private String name;
private String address;
**SETTERS & GETTERS**
}
Run Code Online (Sandbox Code Playgroud)
我List<User>有数据,我想映射值中name和address到UserResource的name和address,用java 8个流和lambda,但我不知道该怎么做.
在线搜索相当一段时间,但无法找到类似的问题.就像是:
List<User> users = **data inserted**
List<UserResource> resources = users.forEach(u ->{
u.setName(users.getName());
u.setAddress(users.getAddress());
});
Run Code Online (Sandbox Code Playgroud)
我试过像下面这样的东西,但我不使用构造函数,不确定如何解决它.
List<UserResource> userResources = users.stream().map(u -> new UserResource(u.getName(), u.getAddress())).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud) 我正在将原始映射Stream到a Stream<Integer>,然后将元素收集到a List<Integer>.
为什么我必须将结果投射collect(Collectors.toList())到List<Integer>我的映射器.map(str -> ((String)str).length())- 已映射到Integer?
我的代码:
List list = Arrays.asList("test", "test2");
List<Integer> lengths = (List<Integer>) list.stream()
.map(str -> ((String)str).length())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果我不使用raw List,则无需强制转换:
List<String> list = Arrays.asList("test", "test2");
List<Integer> lengths = list.stream()
.map(str -> str.length())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud) 什么是迭代Java 8 Stream的最佳方式,这样我可以为每个元素(forEach)执行一个函数,而为每10个元素执行另一个函数.使用foreach的每个元素都显示在下面.我可以使用什么功能来拦截eveyr nth元素并执行第二个函数调用?
示例代码如下: -
Stream<String> strings = Files.lines(path); //some stream
stream.forEach(s -> System::println)// every element but how can i perform
Run Code Online (Sandbox Code Playgroud) 我试图过滤子文档.
样本记录:
[Document{{_id=597608aba213742554f537a6, upp_id=, content_id=597608aba213742554f537a3, idmapping=Document{{ptype=PDF, clientid=12345, normalizedclientid=12345, systeminstanceid=, sourceschemaname=, platforminternalid=0987654321}}, batchid=null, locale=en_US}}]
Run Code Online (Sandbox Code Playgroud)
我需要使用idmapping.ptype = PDF进行过滤
MongoCursor<Document> cursor = mailboxitemCollection.find(whereClause).iterator();
List<Document> documentList = new ArrayList<Document>();
while (cursor.hasNext()) {
Document object = cursor.next();
documentList.add(object);
}
List<Document> outList = documentList.stream()
.filter(p -> p.getInteger(CommonConstants.VISIBILITY) == 1
&& (!StringUtils.isEmpty(req.ptype())? (p.getString("idmapping.ptype").equalsIgnoreCase(req.ptype())) : true)
).parallel().sequential().collect(Collectors.toCollection(ArrayList::new));
System.out.println(outList);
System.out.println(outList.size());
Run Code Online (Sandbox Code Playgroud)
我得到Null Point异常,无法从List documentList中读取sub/embed文档.
先感谢您!Bharathi
我每分钟在一个线程中验证目录中的许多文件.目前我正在使用下面的功能,工作正常.我的问题是我是否可以重写此方法以更快地运行(java8?),并希望缩短.
public boolean validateFile(String fileName) {
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
String[] values = fileName.split("_");
if (values.length == 4) {
if(!values[1].matches("0*")) {
if(!fileName.contains(" ")) {
if(values[3].equals("PASS") || values[3].equals("FAIL")) {
return true;
}
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
验证规则:
您可以使用http://ideone.com/dh8j9M上的文件名示例运行和分叉此代码
我正在尝试学习Java8。是否可以将下面的方法转换为Java 8 Streams filter和forEach。如果是这样,怎么办?
protected void isValidId(CarModel model, List<String> errors) throws DataAccessException {
CarStyle[] styles = model.getStyles();
for(CarStyle style : styles){
if(!style.isModels()){
if(style.getStyleId() > 99){
errors.add(INVALID_ID + ", Id:" + style.getStyleId());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我阅读了一些有关Java 8的教程,但不确定如何实现。谢谢。
编辑:我向该方法添加了一个列表。
我有一个Map<String, ? extends Collection<SomeClass>>.我想确保没有条目集合的大小为0.所以我试过myMap.values().stream().map(Collection::size).allMatch(size -> size > 0).但是,事实证明,myMap包含空条目.
我想检查我的地图是否包含空条目:resourceMap.values().stream().noneMatch(null)但我得到了一个例外java.util.Objects.requireNonNull.
我决定以一种相对老式的方式来做这个for-in循环for (Map.Entry<String, ? extends Collection> entry : myMap)但是,我收到一个编译错误,告诉我foreach不适用于我的Map.
检查地图中的所有条目是否为空且大小> 0的优雅方法是什么?
java-stream ×10
java ×8
java-8 ×7
lambda ×2
asynchronous ×1
dictionary ×1
mongodb ×1
stream ×1
string ×1