标签: java-stream

将InternetAddress集转换为一组String

我有一组InternetAddress recipients是我的收件人.我需要将它转换为Set.我用了

Set<String> reci = new HashSet<>();
for(InternetAddress recipient : recipients){
    reci.add(recipient.toString());
}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,是否可以避免使用循环并使用java 8 map和stream执行此操作.我尝试了以下但是没有用.

recipients.stream().map(String::new).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

这给出了错误'无法解析构造函数字符串'.

java collections java-stream

1
推荐指数
1
解决办法
105
查看次数

如何在java中通过key-> collection map进行流式处理,其中每个流元素都是密钥和集合中的每个元素?

我试图压扁地图但不丢失钥匙.

我想拥有的东西:

Map<K, Collection<V>> keyToValuesMap = ...;
Stream.flattenCollection(keyToValuesMap).forEach((k,v) -> print(k, v));
Run Code Online (Sandbox Code Playgroud)

其中,v表示集合中对应于每个值的每个值k.


一个等效的旧学校Java代码将是:

for (Map.Entry<K, Collection<V>> entry : keyToValuesMap.entrySet())
{
    K k = entry.getKey();

    for (V v : entry.getValue())
    {
         print(k, v);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这个问题不仅仅是对值进行流式处理,因为它key会丢失,如下所示:keyToValuesMap.entrySet().stream().flatMap(keyValuesEntry -> keyValuesEntry.getValue().stream()).forEach(v -> printJustV(v));

*这print只是该对的一个示例动作.

*我在StreamEx中搜索过这样的API ,但找不到.我确信我会在那里找到它......

java collections hashmap java-8 java-stream

1
推荐指数
1
解决办法
95
查看次数

有没有办法将布尔谓词应用于Java中的一组对象属性

我想知道是否有一种更优雅的方式来编写以下代码,它利用了一些流,lambdas和方法引用的组合:

final boolean valid = StringUtils.hasText(obj.getFirstName())
                && StringUtils.hasText(obj.getLastName())
                && StringUtils.hasText(obj.getGender())
                && StringUtils.hasText(obj.getDob());
Run Code Online (Sandbox Code Playgroud)

理想情况下,它看起来像这样:

final boolean valid =
       something(StringUtil::hasText, 
                 obj.getFirstName(),
                 obj.getLastName(),
                 obj.getGender(),
                 obj.getDob());
Run Code Online (Sandbox Code Playgroud)

也许:

final boolean valid =
       something(StringUtil::hasText, obj,
                 Type::getFirstName(),
                 Type::getLastName(),
                 Type::getGender(),
                 Type::getDob());
Run Code Online (Sandbox Code Playgroud)

显然你可以把所有的getter放到List中,然后使用一个流,但这看起来很罗嗦.在我看来,可能有库函数在JRE中或者在Spring或Apache中执行类似的操作.

java lambda java-stream method-reference

1
推荐指数
1
解决办法
76
查看次数

Java流删除前三个元素

我有按学生排序的对象列表id:

List<Student> arraylist = new ArrayList<>();
arraylist.add(new Student(1, "Chaitanya", 26));
arraylist.add(new Student(2, "Chaitanya", 26));
arraylist.add(new Student(3, "Rahul", 24));
arraylist.add(new Student(4, "Ajeet", 32));
arraylist.add(new Student(5, "Chaitanya", 26));
arraylist.add(new Student(6, "Chaitanya", 26));
Run Code Online (Sandbox Code Playgroud)

我想使用流并只删除学生age等于的前三个元素26.你能帮帮我吗?

java arraylist java-stream

1
推荐指数
2
解决办法
265
查看次数

嵌套级别的Java 8流优化

我们如何使用优化此流来收集集合的嵌套级别和根级别.

final Set<String> groupedUsers = new HashSet<>();
groups.stream().forEach(group -> {
    groupedUsers.add(group.getTeamLeadId());
    groupedUsers.addAll(group.getTeamMemberIds().stream().collect(Collectors.toSet()));
});
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

1
推荐指数
1
解决办法
124
查看次数

Java 8:Stream,NIO和Lambda

我有一个包含多行的文件.每行都可以转换为JSONObject.

示例行,

{"name": "a", "age": 28}
{"name": "b", "age": 20}
{"name": "c", "age": 30}
Run Code Online (Sandbox Code Playgroud)

我正在使用新IO读取此文件

Files.lines(path)
Run Code Online (Sandbox Code Playgroud)

我想使用流并将每一行转换为JSONObject,如,

JSONObject obj = new JSONObject(line);
Run Code Online (Sandbox Code Playgroud)

我没有得到如何使用流和lambda.有什么办法吗?

java lambda nio java-8 java-stream

1
推荐指数
1
解决办法
179
查看次数

IntStream而不是没有条件的for循环

在回答我的问题用户nullpointer建议在这里 - /sf/answers/3773415831/如何循环可以转换为流方式使用IntStream.iterate.

我有一个类似的for循环条件,我迭代

void printMultiples(int number, int threshold) {
    for (int i = number; ; i = i + threshold) {
        if (i < threshold) {
            break;
        } else {
            System.out.println(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

试图将其转换为

IntStream.iterate(number, i -> i + number).forEach(System.out::println);
                                              ^^
// Non-short-circuit operation consumes the infinite stream
Run Code Online (Sandbox Code Playgroud)

上面的代码中有一个IDE警告.我也尝试使用检查倍数IntStream.range,下面打印所有数字

IntStream.range(number, threshold).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java java-stream

1
推荐指数
1
解决办法
117
查看次数

使用流在HashMap中收集事件

我有一个练习要解决.我有一个Fox类,它有名字和颜色字段.我的练习是按颜色找出狐狸的频率.

因此我创建了一个HashMap,其中String属性将是狐狸名称,而Integer将是它本身的出现:

    Map<String, Integer> freq = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

完成后,我一直在尝试用流编写代码,但我正在努力做到这一点.我写了这样的东西:

    foxes.stream()
    .map(Fox::getColor)
    .forEach()
    //...(continued later on);
Run Code Online (Sandbox Code Playgroud)

,其中狐狸是一个清单.

我的问题基本上是语法.如果颜色没有出现,我想做一些事情

    freq.put(Fox::getName, 1)
Run Code Online (Sandbox Code Playgroud)

其他

    freq.replace(Fox::getName, freq.get(Fox::getName) + 1)
Run Code Online (Sandbox Code Playgroud)

我该怎么把它放在一起?

java hashmap java-8 java-stream method-reference

1
推荐指数
1
解决办法
57
查看次数

将java Stream转换为Set

我有一个2-D的int数组,以及一个带有指向其中一行的参数的方法.我想Set在该行的元素上返回非零值,并且我想在没有for循环的情况下执行此操作.所以这就是我尝试过的:

public Set<Integer> getNeighbors(int node) {
        assert node >= 0 && node < numNodes : "getNeighbors(): Invalid node parameter given: " + node + ".";
       return Arrays.stream(matrix[node]).filter(n->n>0).collect(Collectors.toSet());
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到一个编译时错误,有点难以解析:

来自我的IDE的屏幕截图

有任何想法吗?

java lambda java-stream

1
推荐指数
1
解决办法
139
查看次数

使用Stream java 8将String转换为set <Character>

private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
SortedSet<Character> set= new TreeSet<Character>();
for (int i = 0; i < ALPHABET.length(); i++) {
    set.add(new Character(ALPHABET.charAt(i)));
 }
Run Code Online (Sandbox Code Playgroud)

我想用Java 8方式转换这个for循环.如果使用流可能会更好.输出将是包含Character的"set"对象.

java collections java-8 java-stream

1
推荐指数
3
解决办法
201
查看次数