java-stream相关内容

Java 8 流的 .min() 和 .max():为什么要编译?

注意:这个问题来自一个死链接,这是一个以前的 SO 问题,但这里是... 请参阅此代码(注意:我确实知道此代码不会“工作"并且应该使用 Integer::compare —— 我刚刚从链接的问题中提取了它): final ArrayList 列表= IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList());Syste ..
发布时间:2021-11-25 21:12:41 Java Web开发

你能把一个流分成两个流吗?

我有一个由 Java 8 流表示的数据集: Stream流 = ...; 我可以看到如何过滤它以获得随机子集 - 例如 Random r = new Random();PrimitiveIterator.OfInt coin = r.ints(0, 2).iterator();流head = stream.filter((x) -> (coin.nextInt() == 0)); 我 ..
发布时间:2021-11-25 20:32:35 Java Web开发

Java 8 的流:为什么并行流更慢?

我正在使用 Java 8 的流,但无法理解我得到的性能结果.我有 2 核 CPU(英特尔 i73520M)、Windows 8 x64 和 64 位 Java 8 update 5.我正在对字符串的流/并行流进行简单映射,发现并行版本有点慢. Function, Long>timeOperation = (Stream stream) ->{long time1 = System.nanoTim ..
发布时间:2021-11-25 19:50:45 Java Web开发

如何用java流对整数列表求和?

我想对整数列表求和.它的工作原理如下,但语法感觉不对.代码可以优化吗? Map整数;integers.values().stream().mapToInt(i -> i).sum(); 解决方案 这会起作用,但是 i ->我 正在做一些自动拆箱,这就是它“感觉"的原因.奇怪的.mapToInt 将流转换为 IntStream“原始整数值元素".以下任一方法都可以使用并更好地解释编译器在使用您 ..
发布时间:2021-11-25 19:42:43 Java Web开发

通过谓词查找第一个元素

我刚刚开始使用 Java 8 lambdas,我正在尝试用函数式语言实现一些我习惯的东西. 例如,大多数函数式语言都有某种对序列或返回第一个元素的列表进行操作的 find 函数,其谓词为 true.我认为在 Java 8 中实现这一目标的唯一方法是: lst.stream().filter(x -> x > 5).findFirst() 然而,这对我来说似乎效率低下,因为过滤器将扫描整个 ..
发布时间:2021-11-25 19:38:03 Java Web开发

为什么 Java Streams 是一次性的?

与 C# 的 IEnumerable 不同,在 C# 中,执行管道可以根据需要执行多次,而在 Java 中,流只能“迭代"一次. 对终端操作的任何调用都会关闭流,使其无法使用.这个“功能"带走了很多力量. 我想这是不是技术的原因.这个奇怪的限制背后的设计考虑是什么? 编辑:为了演示我在说什么,请考虑以下 C# 中快速排序的实现: IEnumerable快速排序(IEnumera ..
发布时间:2021-11-25 19:35:10 Java Web开发

Java Streams:替换 groupingBy 并减少 toMap

我之前问过一个关于增强一些代码的问题,此处.@Holger 给了我正确的回应,他说: 每当您发现自己使用还原收集器时groupingBy,你应该检查toMap是否更合适 这似乎是一种模式!他建议我做的事情非常完美. 这是一个众所周知的模式吗?为什么 toMap 比(在某些情况下)结合 groupingBy 和 reducing 更好? 解决方案 通过使用这两个收集器的经验 ..
发布时间:2021-11-25 19:29:05 Java Web开发

流和惰性求值

我正在阅读 java 8 API 关于流抽象但是这句话我不是很懂: 中间操作返回一个新的流.他们总是懒惰;执行诸如 filter() 之类的中间操作实际上并没有执行任何过滤,而是创建一个新的流,当遍历,包含匹配的初始流的元素给定谓词.管道源的遍历直到执行管道的终端操作. 当过滤操作创建新流时,该流是否包含过滤元素?似乎理解流仅在被遍历时才包含元素,即使用终端操作.但是,过滤后的流包含什 ..
发布时间:2021-11-25 19:18:36 Java Web开发

在 Java 中,流相对于循环的优势是什么?

我在一次采访中被问到这个问题,但我不相信我给出了最好的答案.我提到您可以进行并行搜索,并且我不记得通过某种方式处理空值.现在我意识到我在考虑 Optionals.我在这里错过了什么?他们声称这是更好或更简洁的代码,但我不确定我是否同意. 考虑到它的回答是多么简洁,这似乎毕竟不是一个太宽泛的问题. 如果他们在面试中问这个问题,而且很明显他们是,那么除了让他们更难找到答案之外,分解它还有什 ..
发布时间:2021-11-25 19:02:31 Java Web开发

Collection.stream().forEach() 和 Collection.forEach() 有什么区别?

我知道使用 .stream(),我可以使用像 .filter() 这样的链式操作或使用并行流.但是如果我需要执行一些小的操作(例如打印列表的元素),它们之间有什么区别? collection.stream().forEach(System.out::println);collection.forEach(System.out::println); 解决方案 对于简单的情况,例如图示的情况,它 ..
发布时间:2021-11-25 19:01:39 Java Web开发

使用流生成地图时忽略重复项

Map电话簿 = people.stream().collect(toMap(Person::getName,人::getAddress)); 当发现重复元素时,我得到 java.lang.IllegalStateException: Duplicate key. 是否可以在向地图添加值时忽略此类异常? 当有重复时,它应该继续忽略该重复键. 解决方案 这可以使用 Collec ..
发布时间:2021-11-25 18:34:33 Java Web开发

我应该返回一个集合还是一个流?

假设我有一个方法将只读视图返回到成员列表中: class Team {私人列表玩家 = 新的 ArrayList();//...公开列表获取玩家(){返回 Collections.unmodifiableList(players);}} 进一步假设客户端所做的就是立即迭代列表一次.也许将玩家放入 JList 或其他东西.客户端不存储对列表的引用以供以后检查! 鉴于这种常见情况,我应该返回 ..
发布时间:2021-11-25 18:33:28 Java Web开发

如何将 Java 8 Stream 转换为数组?

将 Java 8 Stream 转换为数组的最简单/最短的方法是什么? 解决方案 最简单的方法是使用带有数组构造函数引用的 toArray(IntFunction generator) 方法.这在 该方法的 API 文档. String[] stringArray = stringStream.toArray(String[]::new); 它所做的是找到一个以整数(大小)作为参数的方 ..
发布时间:2021-11-25 18:01:26 Java Web开发

对 Java 8 流进行分区

如何在 Java 8 Stream 上实现“分区"操作?分区我的意思是,将流划分为给定大小的子流.不知何故,它与 Guava Iterators.partition() 方法,只是希望分区是惰性求值的 Streams 而不是 List 的. 解决方案 将任意源流划分为固定大小的批次是不可能的,因为这会破坏并行处理.并行处理时,您可能不知道拆分后第一个子任务中有多少元素,因此在第一个子任务完 ..
发布时间:2021-11-25 17:53:54 Java Web开发

流到新集合的集合

我正在寻找最轻松的方式来过滤集合.我在想像 集合foo = existingCollection.stream().filter(...).... 但我不确定如何最好地从过滤器转到返回或填充另一个集合.大多数示例似乎都类似于“您可以在这里打印".可能有我缺少的构造函数或输出方法. 解决方案 大多数示例避免将结果存储到 Collection 中是有原因的.这不是推荐的编程方式.您已经有一 ..
发布时间:2021-11-25 17:27:55 Java Web开发

Java 8 流逆序

一般问题:反转流的正确方法是什么?假设我们不知道流由什么类型的元素组成,那么反转任何流的通用方法是什么? 具体问题: IntStream 提供 range 方法来生成特定范围内的整数 IntStream.range(-range, 0),现在我想将其从 0 转换为负数不起作用,我也不能使用 Integer::compare Listlist = Arrays.asList(1,2,3 ..
发布时间:2021-11-25 17:21:04 Java Web开发

Java 8 Streams:多个过滤器与复杂条件

有时你想用多个条件过滤Stream: myList.stream().filter(x -> x.size() > 10).filter(x -> x.isCool()) ... 或者你可以用一个复杂的条件和一个 single filter 来做同样的事情: myList.stream().filter(x -> x.size() > 10 && x -> x.isCool()) ... ..
发布时间:2021-11-25 17:11:55 Java Web开发

Java 8 Nested (Multi level) group by

我有几个像下面这样的课程 class Pojo {列表项目;}类项目{T 键 1;列表子项;}类子项{V键2;对象 otherAttribute1;} 我想根据 key1 聚合项目,对于每个聚合,子项目应该按以下方式通过 key2 聚合: Map> Java 8 Collectors.groupingBy 嵌套如何实现? 我正在尝试一些东西并中途停留 pojo.getItems() ..
发布时间:2021-11-25 17:04:36 Java Web开发

在 Stream::flatMap 中使用 Java 8 的 Optional

新的 Java 8 流框架和朋友创造了一些非常简洁的 Java 代码,但我遇到了一个看似简单的情况,但很难做到简洁. 考虑一个 List事物和方法Optional解决(东西).我想将 Things 映射到 Optionals 并获得第一个 Other.显而易见的解决方案是使用 things.stream().flatMap(this::resolve).findFirst(),但 flatM ..
发布时间:2021-11-25 16:49:22 Java Web开发