Tag: java stream

Java 8:我如何使用stream中的exception抛出方法?

假设我有一个类和一个方法 class A { void foo() throws Exception() { … } } 现在我想为每个由stream传递的A实例调用foo,如下所示: void bar() throws Exception { Stream<A> as = … as.forEach(a -> a.foo()); } 问题:如何正确处理exception? 该代码不会在我的机器上编译,因为我没有处理可能由foo()引发的exception。 throws Exception bar在这里似乎没用。 这是为什么?

在Java 8中,如何使用lambda将Map <K,V>转换为另一个Map <K,V>?

我刚刚开始研究Java 8并尝试使用lambdaexpression式,我想我会尝试重写最近编写的一个非常简单的东西。 我需要将一个string映射到列到另一个string映射到列新地图列是在第一个地图列的防御副本。 列有一个拷贝构造函数。 我到目前为止最接近的是: Map<String, Column> newColumnMap= new HashMap<>(); originalColumnMap.entrySet().stream().forEach(x -> newColumnMap.put(x.getKey(), new Column(x.getValue()))); 但我确定有一个更好的方法来做到这一点,我会很感激的一些build议。

Java 8stream:多个filter与复杂的条件

有时候你想过滤一个Stream并且有多个条件: myList.stream().filter(x -> x.size() > 10).filter(x -> x.isCool()) … 或者你可以做一个复杂的条件和一个单一的 filter : myList.stream().filter(x -> x.size() > 10 && x -> x.isCool()) … 我的猜测是,第二种方法有更好的性能特点,但我不知道 。 第一种方法赢得了可读性,但是什么更好的performance?

使用stream添加BigDecimals

我有一个BigDecimals集合(在这个例子中是一个LinkedList ),我想将它们加在一起。 有没有可能为此使用stream? 我注意到Stream类有几个方法 Stream::mapToInt Stream::mapToDouble Stream::mapToLong 每个方法都有一个方便的sum()方法。 但是,正如我们所知, float和double算术几乎总是一个坏主意。 那么,总结BigDecimals有一个方便的方法吗? 这是迄今为止的代码。 public static void main(String[] args) { LinkedList<BigDecimal> values = new LinkedList<>(); values.add(BigDecimal.valueOf(.1)); values.add(BigDecimal.valueOf(1.1)); values.add(BigDecimal.valueOf(2.1)); values.add(BigDecimal.valueOf(.1)); // Classical Java approach BigDecimal sum = BigDecimal.ZERO; for(BigDecimal value : values) { System.out.println(value); sum = sum.add(value); } System.out.println("Sum = " + sum); // Java 8 approach values.forEach((value) […]

Java 8:Streams vs Collections的性能

我是Java 8的新手。我还是不太了解这个API,但是我做了一个小的非正式的基准testing来比较新的Streams API和旧版本的性能。 testing包括过滤Integer列表,并为每个偶数计算平方根并将其存储在Double的结果List中。 这里是代码: public static void main(String[] args) { //Calculating square root of even numbers from 1 to N int min = 1; int max = 1000000; List<Integer> sourceList = new ArrayList<>(); for (int i = min; i < max; i++) { sourceList.add(i); } List<Double> result = new LinkedList<>(); //Collections approach long t0 […]

是否有可能在Java 8中投射stream?

是否有可能在Java 8中投射stream? 说我有一个对象列表,我可以做这样的事情来过滤掉所有的附加对象: Stream.of(objects).filter(c -> c instanceof Client) 在这之后,如果我想和客户做一些事情,我需要把它们中的每一个都投给: Stream.of(objects).filter(c -> c instanceof Client) .map(c -> ((Client) c).getID()).forEach(System.out::println); 这看起来有点难看。 是否有可能将整个stream转换为不同的types? 像将Stream<Object> Stream<Client>转换为Stream<Client> ? 请忽略这样的事实可能意味着不好的devise。 我们在计算机科学课上做这样的东西,所以我正在研究java 8的新特性,并且很好奇这是否可能。

Java 8stream和RxJava可观察对象之间的区别

Java 8stream类似于RxJava observables? Java 8stream的定义: 新的java.util.stream包中的类提供了一个Stream API来支持元素stream上的函数式操作。

如何将Java8stream的元素添加到现有列表中

收集器的Javadoc显示如何将stream的元素收集到新列表中。 有没有一个单线程将结果添加到现有的ArrayList中?

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

Map<String, String> phoneBook=people.stream() .collect(toMap(Person::getName, Person::getAddress)); 重复发生时,我会得到重复键exception。 是否有可能忽略添加值来映射重复发生时? 当有重复时,只需继续忽略该重复键。

Java 8 – 转换列表的最佳方式:map或foreach?

我有一个列表myListToParse我想过滤的元素和应用每个元素的方法,并将结果添加到另一个列表myFinalList 。 对于Java 8,我注意到我可以用两种不同的方法来完成。 我想知道他们之间更有效的方式,并理解为什么一种方式比另一种更好。 任何有关第三种方式的build议我都会公开。 方法1: myListToParse.stream() .filter(elt -> elt != null) .forEach(elt -> myFinalList.add(doSomething(elt))); 方法2: myFinalList = myListToParse.stream() .filter(elt -> elt != null) .map(elt -> doSomething(elt)) .collect(Collectors.toList());