Tag: java stream

Java SE 8是否有对或元组?

我在Java SE 8中玩懒惰的函数操作,我想将索引i map到一个pair / tuple (i, value[i]) ,然后基于第二个value[i]元素进行filter ,最后输出只是指数。 我还必须忍受这个问题: 什么是Java中的C ++ Pair <L,R>的等价物? 在大胆的lambda和stream的新时代? 更新:我提出了一个相当简单的例子,在下面的答案之一中有@dkatzel提供的整洁的解决scheme。 但是,它并没有概括。 因此,让我加一个更一般的例子: package com.example.test; import java.util.ArrayList; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { boolean [][] directed_acyclic_graph = new boolean[][]{ {false, true, false, true, false, true}, {false, false, false, true, false, true}, {false, false, […]

将Java Stream过滤为1并且只有1个元素

我正在尝试使用Java 8 Stream来查找LinkedList元素。 但是,我想保证,过滤条件只有1个匹配。 拿这个代码: public static void main(String[] args) { LinkedList<User> users = new LinkedList<>(); users.add(new User(1, "User1")); users.add(new User(2, "User2")); users.add(new User(3, "User3")); User match = users.stream().filter((user) -> user.getId() == 1).findAny().get(); System.out.println(match.toString()); } static class User { @Override public String toString() { return id + " – " + username; } int id; […]

使用Stream / Map-Reduce / Collector的Java8:HashMap <X,Y>到HashMap <X,Z>

我知道如何从Y – > Z “转换”一个简单的Java List ,即: List<String> x; List<Integer> y = x.stream() .map(s -> Integer.parseInt(s)) .collect(Collectors.toList()); 现在我想用一个Map来做基本相同的事情,即: INPUT: { "key1" -> "41", // "41" and "42" "key2" -> "42 // are Strings } OUTPUT: { "key1" -> 41, // 41 and 42 "key2" -> 42 // are Integers } 解决scheme不应该限于String – > Integer 。 […]

添加两个Java 8stream或一个额外的元素到一个stream

我可以添加stream或额外的元素,如下所示: Stream stream = Stream.concat(stream1, Stream.concat(stream2, Stream.of(element)); 我可以随时添加新的东西,像这样: Stream stream = Stream.concat( Stream.concat( stream1.filter(x -> x!=0), stream2) .filter(x -> x!=1), Stream.of(element)) .filter(x -> x!=2); 但这很丑,因为concat是静态的。 如果concat是一个实例方法,上面的例子会更容易阅读: Stream stream = stream1.concat(stream2).concat(element); 和 Stream stream = stream1 .filter(x -> x!=0) .concat(stream2) .filter(x -> x!=1) .concat(element) .filter(x -> x!=2); 我的问题是: 1) concat是静态的吗? 还是有一些等价的实例方法,我失踪了? 2)无论如何,有没有更好的方法来做到这一点?

我怎样才能从Java 8stream内引发CHECKEDexception? (不包装成未经检查的例外)

我怎样才能从Java 8stream/ lambdas中引发CHECKEDexception? 换句话说,我想编译这样的代码: public List<Class> getClasses() throws ClassNotFoundException { List<Class> classes = Stream.of("java.lang.Object", "java.lang.Integer", "java.lang.String") .map(className -> Class.forName(className)) .collect(Collectors.toList()); return classes; } 此代码不会编译,因为上面的Class.forName()方法会抛出ClassNotFoundException 。 请注意,我不想将检查的exception包装在运行时exception中,而是抛出包装的未经检查的exception。 我想抛出检查exception本身 ,而不添加丑陋的try / catches到stream。

Java 8方法引用:提供能够提供参数化结果的供应商

我想用 java.util.Optional.orElseThrow() 用一个Exceptiontypes来请求一个构造函数参数。 像这样的东西: orElseThrow(MyException::new(someArgument)) // obviously NOT working 有没有办法创build一个供应商,传递我的参数值?

Java 8stream和arrays上的操作

我刚刚发现了新的Java 8streamfunction。 来自Python,我想知道现在是否有一个简单的方法来做像求和这样的数组操作,将两个数组以“一行pythonic”的方式相乘? 谢谢

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

我明白,使用.stream() ,我可以使用像.filter()或使用并行stream链操作。 但是,如果我需要执行小操作(例如,打印列表元素),它们之间有什么区别呢? collection.stream().forEach(System.out::println); collection.forEach(System.out::println);

如何总结与javastream整数列表?

我想总结一个整数列表。 它的工作原理如下,但语法不正确。 代码能被优化吗? Map<String, Integer> integers; integers.values().stream().mapToInt(i -> i).sum();

为什么一次性Javastream?

与C#的IEnumerable ,在执行stream水线可以执行多次的情况下,Java中的stream只能被“迭代”一次。 任何对terminal操作的调用都会closuresstream,导致stream不可用。 这个“function”带走了很多权力。 我想这是不是技术性的原因。 这个奇怪的限制背后的devise考虑是什么? 编辑:为了演示我在说什么,请考虑以下在C#中的快速sorting实现: IEnumerable<int> QuickSort(IEnumerable<int> ints) { if (!ints.Any()) { return Enumerable.Empty<int>(); } int pivot = ints.First(); IEnumerable<int> lt = ints.Where(i => i < pivot); IEnumerable<int> gt = ints.Where(i => i > pivot); return QuickSort(lt).Concat(new int[] { pivot }).Concat(QuickSort(gt)); } 可以肯定的是,我并不是主张这是一个快速sorting的好实现! 然而,这是lambdaexpression式与stream操作相结合的performance力的一个很好的例子。 而且不能用Java来完成! 我什至不能问一个stream是否是空的,而不会使其无法使用。