标签: java-stream

为什么Stream.allMatch()为空流返回true?

我的同事和我有一个错误是由于我们假设空流调用allMatch()将返回false.

if (myItems.allMatch(i -> i.isValid()) { 
    //do something
}
Run Code Online (Sandbox Code Playgroud)

当然,假设而不是阅读文档是我们的错.但我不明白为什么allMatch()空流的默认行为返回true.这是什么原因?就像anyMatch()(相反地返回false)一样,这个操作以一种离开monad并且可能在if声明中使用的命令性方式使用.考虑到这些事实,是否有任何理由为什么在大多数用途中需要allMatch()默认为true空流?

java lambda java-8 java-stream

75
推荐指数
3
解决办法
2万
查看次数

如何使用另一个列表中的对象的属性创建新列表

想象一下,我有一些特定对象的列表:

List<Student>
Run Code Online (Sandbox Code Playgroud)

我需要生成包含另一个列表ids的Students在上面的列表:

List<Integer>
Run Code Online (Sandbox Code Playgroud)

避免使用循环,是否可以通过使用apache集合或番石榴来实现这一点?

哪种方法对我的情况有用?

java collections list guava java-stream

73
推荐指数
5
解决办法
7万
查看次数

Collectors.toMap()keyMapper - 更简洁的表达方式?

我试图在下面的Collectors.toMap()调用中为"keyMapper"函数参数提供一个更简洁的表达式:

List<Person> roster = ...;

Map<String, Person> map = 
    roster
        .stream()
        .collect(
            Collectors.toMap(
                new Function<Person, String>() { 
                    public String apply(Person p) { return p.getLast(); } 
                },
                Function.<Person>identity()));
Run Code Online (Sandbox Code Playgroud)

似乎我应该能够使用lambda表达式来内联它,但我无法想出一个编译它的人.(我对lambdas很新,所以这并不奇怪.)

谢谢.

- >更新:

如接受的答案所述

Person::getLast
Run Code Online (Sandbox Code Playgroud)

是我在寻找的东西,也是我尝试过的东西.然而,Eclipse 4.3的BETA_8每晚构建是问题 - 它标记为错误.从命令行编译时(我应该在发布之前完成),它起作用了.所以,是时候用eclipse.org提交bug了.

谢谢.

java collections lambda java-8 java-stream

73
推荐指数
3
解决办法
19万
查看次数

Java 8:使用流API合并列表

我有以下情况

Map<Key, ListContainer> map; 

public class ListContainer{
  List<AClass> lst;
}
Run Code Online (Sandbox Code Playgroud)

我已经合并所有列表lst从ListContainer从对象Map地图.

public static void main(String args[]){
   List<AClass> alltheObjectsAClass = map.values().stream(). // continue....    
}
Run Code Online (Sandbox Code Playgroud)

任何想法,使用Java 8流API?

java list java-8 java-stream

71
推荐指数
3
解决办法
9万
查看次数

获取流的最后一个元素的最有效方法

Stream没有last()方法:

Stream<T> stream;
T last = stream.last(); // No such method
Run Code Online (Sandbox Code Playgroud)

获取最后一个元素的最优雅和/或最有效的方法是什么(空流为null)?

java java-8 java-stream

71
推荐指数
4
解决办法
4万
查看次数

Java 8 Stream中的forEach vs forEachOrdered

我知道这些方法的执行顺序不同,但在我的所有测试中,我都无法实现不同的顺序执行.

例:

System.out.println("forEach Demo");
Stream.of("AAA","BBB","CCC").forEach(s->System.out.println("Output:"+s));
System.out.println("forEachOrdered Demo");
Stream.of("AAA","BBB","CCC").forEachOrdered(s->System.out.println("Output:"+s));
Run Code Online (Sandbox Code Playgroud)

输出:

forEach Demo
Output:AAA
Output:BBB
Output:CCC
forEachOrdered Demo
Output:AAA
Output:BBB
Output:CCC
Run Code Online (Sandbox Code Playgroud)

请提供两种方法产生不同输出的示例.

java foreach java-8 java-stream

71
推荐指数
3
解决办法
4万
查看次数

Java 8,Streams查找重复元素

我试图列出整数列表中的重复元素,例如,

List<Integer> numbers = Arrays.asList(new Integer[]{1,2,1,3,4,4});    
Run Code Online (Sandbox Code Playgroud)

使用jdk的Streams 8.有没有人试过.要删除重复项,我们可以使用distinct()api.但是如何找到重复的元素呢?有人可以帮帮我吗?

java lambda java-8 java-stream

70
推荐指数
6
解决办法
11万
查看次数

在流上使用Collections.toMap()时,如何保持List的迭代顺序?

我创建一个Map从List如下:

List<String> strings = Arrays.asList("a", "bb", "ccc");

Map<String, Integer> map = strings.stream()
    .collect(Collectors.toMap(Function.identity(), String::length));
Run Code Online (Sandbox Code Playgroud)

我希望保持与之相同的迭代顺序List.如何创建LinkedHashMap使用Collectors.toMap()方法?

java collections java-8 java-stream

70
推荐指数
2
解决办法
4万
查看次数

为什么flatMap()之后的filter()在Java流中"不完全"懒惰?

我有以下示例代码:

System.out.println(
       "Result: " +
        Stream.of(1, 2, 3)
                .filter(i -> {
                    System.out.println(i);
                    return true;
                })
                .findFirst()
                .get()
);
System.out.println("-----------");
System.out.println(
       "Result: " +
        Stream.of(1, 2, 3)
                .flatMap(i -> Stream.of(i - 1, i, i + 1))
                .flatMap(i -> Stream.of(i - 1, i, i + 1))
                .filter(i -> {
                    System.out.println(i);
                    return true;
                })
                .findFirst()
                .get()
);
Run Code Online (Sandbox Code Playgroud)

输出如下:

1
Result: 1
-----------
-1
0
1
0
1
2
1
2
3
Result: -1
Run Code Online (Sandbox Code Playgroud)

从这里我看到,在第一种情况下stream真的表现得懒惰 - 我们使用findFirst()所以一旦我们有第一个元素我们的过滤lambda没有被调用.然而,在使用flatMaps的第二种情况下,我们看到尽管找到满足过滤条件的第一个元素(它只是任何第一个元素,因为lambda总是返回true),流的其他内容仍然通过过滤函数被馈送.

我试图理解为什么它表现得像这样,而不是在第一个元素计算后放弃,如第一种情况.任何有用的信息将不胜感激.

java lambda java-8 java-stream

70
推荐指数
4
解决办法
6190
查看次数

使用Java中的stream.sorted()对列表进行排序

我有兴趣从流中排序列表.这是我正在使用的代码:

list.stream()
    .sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue()))
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?该列表没有排序.

它应该根据具有最低值的项目对列表进行排序.

for (int i = 0; i < list.size(); i++)
{
   System.out.println("list " + (i+1));
   print(list, i);
}
Run Code Online (Sandbox Code Playgroud)

和打印方法:

public static void print(List<List> list, int i)
{
    System.out.println(list.get(i).getItem().getValue());
}
Run Code Online (Sandbox Code Playgroud)

java sorting list java-stream

70
推荐指数
3
解决办法
14万
查看次数

标签 统计

java ×10

java-stream ×10

java-8 ×8

lambda ×4

collections ×3

list ×3

foreach ×1

guava ×1

sorting ×1