替换'for'循环中的if-else与Java-8流 [英] Replacing if-else within 'for' loops with Java-8 Streams

查看:551
本文介绍了替换'for'循环中的if-else与Java-8流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下简单的代码,我试图将其转换为函数样式。(String str:list){

  b $ b if(someCondition(str)){
list2.add(doSomeThing(str));
}
else {
list2.add(doSomethingElse(str));






$ b

很容易用流代替这个循环吗?我看到的唯一选择是使用两种不同的过滤条件对流进行迭代。

解决方案

听起来你可以使用<

  List< String> code> map  list2 = list 
.stream()
.map(str - > someCondition(str)?doSomething(str):doSomethingElse(str))
.collect(Collectors.toList()) ;

简短但完整的示例将短字符串映射为小写字母和长字符以大写形式:

  import java.util。*; 
import java.util.stream。*;

public class Test {

public static void main(String [] args){
List< String> list = Arrays.asList(abC,Long Mixed,SHORT);
列表< String> list2 = list
.stream()
.map(str - > str.length()> 5?str.toUpperCase():str.toLowerCase())
.collect Collectors.toList());
for(String result:list2){
System.out.println(result); // abc,LONG MIXED,short
}
}
}


I have following simple code that I am trying to convert to functional style

for(String str: list){
    if(someCondition(str)){
       list2.add(doSomeThing(str));
    }
    else{
        list2.add(doSomethingElse(str));
    }
}

Is it easily possible to replace this loop with stream? Only option I see is to iterate over the stream twice with two different filter conditions.

解决方案

It sounds like you can just use map with a condition:

List<String> list2 = list
    .stream()
    .map(str -> someCondition(str) ? doSomething(str) : doSomethingElse(str))
    .collect(Collectors.toList());

Short but complete example mapping short strings to lower case and long ones to upper case:

import java.util.*;
import java.util.stream.*;

public class Test {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("abC", "Long Mixed", "SHORT");
        List<String> list2 = list
            .stream()
            .map(str -> str.length() > 5 ? str.toUpperCase() : str.toLowerCase())
            .collect(Collectors.toList());
        for (String result : list2) {
            System.out.println(result); // abc, LONG MIXED, short
        }
    }
}

这篇关于替换'for'循环中的if-else与Java-8流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆