草庐IT

Stream流

全部标签

java - 如何从迭代器创建 Java 8 Stream?

是否可以从Iterator创建Stream,其中对象的序列与重复调用迭代器的next()方法生成的对象序列相同?我正在考虑的具体情况涉及TreeSet.descendingIterator()返回的迭代器的使用,但我可以想象在其他情况下迭代器可用,但它引用的集合不可用。例如,对于TreeSettset我们可以写tset.stream()...并以集合的排序顺序获取该集合中的对象流,但是如果我们希望它们以不同的顺序排列,例如通过使用descendingIterator()可获得的顺序怎么办??我想像tset.descendingIterator().stream()...或stream(

java - org.hibernate.HibernateException : Unable to access lob stream

我正在使用hibernate3.6.7将我的类映射到oracle表。我通常不会得到这个异常:org.hibernate.HibernateException:Unabletoaccesslobstreamatjava.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)atjava.util.concurrent.FutureTask.get(FutureTask.java:83)atcom.mycompany.TransferFiles.TransferFilesToHadoop(TransferFiles.jav

java - 为什么 Stream 没有 toList() 方法?

使用Java8流时,获取列表、从中创建流、处理业务并将其转换回来是很常见的。比如:Stream.of(-2,1,2,-5).filter(n->n>0).map(n->n*n).collect(Collectors.toList());为什么'.collect(Collectors.toList())'部分没有捷径/方便的方法?在Stream接口(interface)上,有一个方法可以将结果转换为数组,称为toArray(),为什么缺少toList()?恕我直言,将结果转换为列表比转换为数组更常见。我可以忍受,但称它为丑陋是很烦人的。有什么想法吗? 最佳答案

java - Stream方式获取第一个元素匹配 boolean 值的索引

我有一个List.我想使用特定用户名获取流中(第一个)用户的索引。我不想真正需要User成为.equals()对一些描述User,只是为了拥有相同的用户名。我可以想到一些丑陋的方法来做到这一点(迭代和计数),但感觉应该有一个很好的方法来做到这一点,可能是通过使用Streams。到目前为止,我拥有的最好的是:intindex=users.stream().map(user->user.getName()).collect(Collectors.toList()).indexOf(username);这不是我写过的最糟糕的代码,但也不是很好。它也不是那么灵活,因为它依赖于映射函数到具有.e

具有多个语句的 Java 8 Lambda Stream forEach

我还在学习Lambda,如果做错了请见谅finalLongtempId=12345L;ListupdatedEntries=newLinkedList();for(Entryentry:entryList){entry.setTempId(tempId);updatedEntries.add(entityManager.update(entry,entry.getId()));}//entryList.stream().forEach(entry->entry.setTempId(tempId));似乎forEach只能为一个语句执行。它不会返回更新的流或函数以进一步处理。我可能完全选

Java 8 Stream API 查找与属性值匹配的唯一对象

使用Java8Stream从Collection中查找与Property值匹配的对象。Listobjects=newArrayList();个人属性->姓名、电话、电子邮件。遍历人员列表并找到对象匹配的电子邮件。看到这可以通过Java8流轻松完成。但这仍然会返回一个集合?例如:ListmatchingObjects=objects.stream.filter(p->p.email().equals("testemail")).collect(Collectors.toList());但我知道它总会有一个独特的对象。我们可以做些什么来代替Collectors.toList以便我直接获得实

java - 使用 Stream 避免 NoSuchElementException

我有以下Stream:Streamstream=stream();Tresult=stream.filter(t->{doublex=getX(t);doubley=getY(t);return(x==tx&&y==ty);}).findFirst().get();returnresult;但是,并不总是有结果给我以下错误:NoSuchElementException:Novaluepresent那么如果没有值,我该如何返回null? 最佳答案 您可以使用Optional.orElse,这比检查isPresent简单得多:Tresu

java - java.util.Collection 为什么不实现新的 Stream 接口(interface)?

我刚刚花了一些时间开始研究有关流和lambda的java-8嗡嗡声。令我惊讶的是,您不能直接在java.util.Collection上应用Stream操作,例如.map()、.filter()>。java.util.Collection接口(interface)未扩展是否有技术原因这些Stream操作的默认实现?谷歌一下,我看到很多人按照以下模式编码的例子:Listlist=someListExpression;ListanotherList=list.stream().map(x->f(x)).collect(Collectors.toList());如果您的代码中有很多这样的流操

java - Java 8 是否缺少处理可变流的 Stream.concat?

目前我们有以下Stream.concat在Java8中:publicstaticStreamconcat(Streama,Streamb);我很惊讶为什么没有版本采用Stream的可变参数?目前我的代码如下:StreamresultStream=Stream.concat(stream1,Stream.concat(stream2,Stream.of(element))).filter(x->x!=0).filter(x->x!=1).filter(x->x!=2);如果此签名的可变参数可用:publicstaticStreamconcat(Stream...streams);然后我可

java - 如何将多个谓词应用于 java.util.Stream?

如何将多个谓词应用于java.util.Stream的filter()方法?这就是我现在所做的,但我不太喜欢它。我有一个Collection事物,我需要根据过滤器(谓词)的Collection减少事物的数量:Collectionthings=someGenerator.someMethod();Listfiltered=things.parallelStream().filter(p->{for(Filterf:filtersCollection){if(f.test(p))returntrue;}returnfalse;}).collect(Collectors.toList());