Tag: java stream

Java中的Streams无法想出这段代码

我找到了以下代码片段: Function<Integer, Predicate> smallerThan = x -> y -> y < x; List l = Arrays.asList(5, 6, 7, 23, 4, 5645, 6, 1223, 44453, 60182, 2836, 23993, 1); List list2 = l.stream() .filter(smallerThan.apply(l.get(0))) .collect(Collectors.toList()); System.out.println(list2); 作为输出我收到: [4, 1] 考虑到我们只传递一个参数smallerThan.apply(l.get(0)) ,这个例子中的smallerThan函数如何工作?

Java 8/9:String中的字符是否可以映射到其索引(使用流)?

给定一个String s和一个char c ,我很好奇是否存在一些从s生成List list s (其中list中的元素表示s中c的索引)。 一个接近但不正确的方法是: public static List getIndexList(String s, char c) { return s.chars() .mapToObj(i -> (char) i) .filter(ch -> ch == c) .map(s::indexOf) // Will obviously return the first index every time. .collect(Collectors.toList()); } 以下输入应产生以下输出: getIndexList(“Hello world!”, ‘l’) -> [2, 3, 9]

如何使用lambda流迭代嵌套列表?

我正在尝试使用`stream将以下代码重构为lambda表达式,尤其是嵌套的foreach循环: public static Result match (Response rsp) { Exception lastex = null; for (FirstNode firstNode : rsp.getFirstNodes()) { for (SndNode sndNode : firstNode.getSndNodes()) { try { if (sndNode.isValid()) return parse(sndNode); //return the first match, retry if fails with ParseException } catch (ParseException e) { lastex = e; } } } //throw the exception if all […]

在给定Charset的情况下将InputStream转换为Stream

我希望将一个InputStream is转换为一个Stream stream给定一个Charset cs ,使得stream由is 。 此外,不应立即读取一行,而是仅在stream需要时才读取。

Java 8`Stream`可以并行,你甚至不需要它吗?

在我看来,显而易见的代码,当使用Java 8 Stream ,无论它们是“对象”流还是原始流(即IntStream和朋友)都只是使用: someStreamableResource.stream().whatever() 但是,相当多的“可流动资源”也有.parallelStream() 。 读取javadoc时不清楚的是.stream()流是否始终是顺序的,以及.parallelStream()流是否始终是并行的… 然后是Spliterator ,特别是它的.characteristics() ,其中之一就是它可以是CONCURRENT ,甚至是IMMUTABLE 。 我的直觉是,事实上,默认情况下, Stream是否可以并行,或者根本不是并行,由其底层的Spliterator引导… 我是在正确的轨道上吗? 我已经阅读并再次阅读了javadocs,但仍无法对这个问题做出明确答案……

Java8 Stream:满足条件后收集元素

我的POJO如下 class EventUser { private id; private userId; private eventId; } 我按如下方式检索EventUser对象: List eventUsers = eventUserRepository.findByUserId(userId); 说’eventUsers’如下: [ {“id”:”id200″,”userId”:”001″,”eventId”:”1010″}, {“id”:”id101″,”userId”:”001″,”eventId”:”4212″}, {“id”:”id402″,”userId”:”001″,”eventId”:”1221″}, {“id”:”id301″,”userId”:”001″,”eventId”:”2423″}, {“id”:”id701″,”userId”:”001″,”eventId”:”5423″}, {“id”:”id601″,”userId”:”001″,”eventId”:”7423″} ] 使用流式传输,而不使用任何中间变量,如何在给定的EventUser.id之后过滤和收集事件:ex: List filteredByOffSet = eventUsers.stream.SOMEFILTER_AND_COLLECT(“id301”); 结果应该是: [{“id”:”id301″,”userId”:”001″,”eventId”:”2423″}, {“id”:”id701″,”userId”:”001″,”eventId”:”5423″}, {“id”:”id601″,”userId”:”001″,”eventId”:”7423″}]

使用Stream API在每个对象上调用方法的“好”方法

是否可以在消费者中运行方法,如方法引用,但是在传递给使用者的对象上: Arrays.stream(log.getHandlers()).forEach(h -> h.close()); 会是这样的事情: Arrays.stream(log.getHandlers()).forEach(this::close); 但那不行…… 是否有可能使用方法引用,或者x -> x.method()是在这里工作的唯一方法吗?

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

使用Java 8 Stream从集合中查找与Property值匹配的对象。 List objects = new ArrayList(); 人员属性 – >姓名,电话,电子邮件。 迭代人员列表并找到匹配电子邮件的对象。 看到这可以通过Java 8流轻松完成。 但那仍然会收回一个集合? 例如: List matchingObjects = objects.stream. filter(p -> p.email().equals(“testemail”)). collect(Collectors.toList()); 但我知道它总会有一个独特的对象。 我们可以做一些事情而不是Collectors.toList以便我直接得到实际的对象。而不是获取对象列表。

为什么Collector接口的组合器与重载的collect方法不一致?

在接口Stream有一个带有以下签名的重载方法collect() : R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner) 还有另一个版本的collect(Collector collector) ,它接收具有前三个函数的对象。 与combiner Collector对应的接口Collector的属性具有签名BinaryOperator combiner() 。 在后一种情况下,Java API 8声明: 组合器函数可以将状态从一个参数折叠到另一个参数并返回该参数,或者可以返回新的结果容器。 为什么前者collect方法也没有收到BinaryOperator ?

将链接的对象转换为流或集合

我想迭代堆栈跟踪。 stacktrace由throwables组成,其getCause()返回下一个throwable。 对getCause()的最后一次调用返回null。 (示例:a – > b – > null) 我试图使用Stream.iterable()导致NullPointerException,因为iterable中的元素不能为null。 以下是该问题的简短演示: public void process() { Throwable b = new Throwable(); Throwable a = new Throwable(b); Stream.iterate(a, Throwable::getCause).forEach(System.out::println); } 我目前正在使用while循环手动创建集合: public void process() { Throwable b = new Throwable(); Throwable a = new Throwable(b); List list = new ArrayList(); Throwable element = a; while (Objects.nonNull(element)) […]