标签: java-stream

转换为循环到流的双倍?

我只是好奇我是否可以切换它

 for (String arg : args) {
        int number = Integer.parseInt(arg);
        int checksum = 0;

        for (int digits = 0; digits < 10; digits++) {
            checksum += number % 10;
            number /= 10;
        }
        System.out.println(checksum);
    }
}
Run Code Online (Sandbox Code Playgroud)

到一个管道Java流(只有那个条件,没有递归方法等).

我的第一次尝试是

    public static void main(String... args) {
    Stream.of(args)
            .?
    }
Run Code Online (Sandbox Code Playgroud)

然后以某种方式使用如下函数:

class FunctionTest implements Function<String, Integer> {
    @Override
    public Integer apply(String s) {
        int number = Integer.parseInt(s);
        int checksum = 0;

        IntStream.range(1,10).reduce(number, ()-> ?)

            checksum += number % 10;
            number /= 10; …
Run Code Online (Sandbox Code Playgroud)

java replace for-loop java-stream

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

Java流或映射按键合并

将诸如键"55","55004","550009","550012"之类的Map键值合并为一个键的最简单方法是什么:"55"和所有这些值的总和().

我正在尝试使用containsKey或修剪密钥的方法.很难想到这一点.

也许是一个flatMap来平整地图并减少.

@Test
public void TestM(){
        Map<String,Object> map1 = new HashMap();
        map1.put("55", 3453.34);
        map1.put("55001", 5322.44);
        map1.put("55003", 10112.44);
        map1.put("55004", 15555.74);
        map1.put("77", 1000.74); // instead of 1000 it should be ~1500
        map1.put("77004", 444.74);
        map1.put("77003", 66.74);
        // in real example I'll need "77" and "88" and "101" etc. 
        // All of which has little pieces like 77004, 77006

        Map<String,Double> SumMap = new HashMap<String, Double>();

        SumMap = map1.entrySet().stream().map
                   (e->e.getValue()).reduce(0d, Double::sum);
       // INCORRECT
       // REDUCE INTO ONE KEY startsWith 55 …
Run Code Online (Sandbox Code Playgroud)

java java-stream

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

Stream.filter()在数组中留下空值

我有这样的代码

int[] array = {1, -1, 2, 3, -4};

Integer[] out = Arrays
    .stream(array)
    .filter(elem -> elem >= 0) // remove negatives
    .boxed()
    .collect(Collectors.toList())
    .toArray(new Integer[array.length]);
Run Code Online (Sandbox Code Playgroud)

但是过滤操作将数组中的负元素保留为nulls.为什么不删除它们?

java java-stream

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

Java 8 Collection stream Collectors.toMap

为什么这段代码不能为我编译?

我尝试使用stream和toMap选项将List转换为Map

List<CountryToPaymentMethodsDisplayRules>
   paymentMethodDisplayRulesByCountryList = 
       gatway.getCountryPaymentMethodsDisplayRulesByCountry();

Map<PaymentMethod, CountryToPaymentMethodsDisplayRules>
   countryToPaymentMethodsDisplayRulesMap = paymentMethodDisplayRulesByCountryList
       .stream()
       .collect(Collectors.toMap(type -> type.getCountryToPaymentMethodsDisplayRules().getPaymentMethod(),
                                 type -> type));

public interface PaymentMethod extends Serializable {
}

public enum PaymentMethodType implements PaymentMethod, Serializable {
}

public interface CountryToPaymentMethodsDisplayRules {
    public PaymentMethod getPaymentMethod();
}

public class CountryToPaymentMethodsDisplayRulesEntity implements CountryToPaymentMethodsDisplayRules, PersistentEntity<Long>, Serializable {
    @Type(type = "com.plimus.core.payment.PaymentMethodTypeUserType")
    @Column(name = "PAYMENT_TYPE")
    private PaymentMethod paymentMethod;
}
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

java java-8 java-stream collectors

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

Java 8流:将String []转换为Float []

我有一个数组String[],我想转换为数组Float[]

考虑eString[]提供的通道HttpServletRequest::getParameterMap().我试过了:

Arrays.stream(e.getValue()).mapToDouble(Float::parseFloat).boxed().toArray(Float[]::new));
Run Code Online (Sandbox Code Playgroud)

得到例外:

java.lang.ArrayStoreException:java.lang.Double

那么我试过:

Arrays.stream(e.getValue()).mapToDouble(Double::parseDouble).boxed().toArray(Float[]::new));
Run Code Online (Sandbox Code Playgroud)

结果相同.

java type-conversion java-stream

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

如果在字符列表中找到字符串,则使用Java 8 Streams替换字符串中的字符

输入= M+a?i*n S=t

期望值= M a i n s t

每个角色从比较输入与字符的下面的列表,如果发现有空格替换它和输出中应expectedValue

。,(,:,;,),{,*,+,_,-,!,?,〜,%,=,¦,¬,¢,\,<,>,&,,,},$, '',`,@,[,],±,Ñ,P¦,_,$

java java-8 java-stream

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

如何使用java中的流收集List <String>到List <String>?

我有listData (List<String>)一个getList接受String作为参数的方法(例如"java")并返回一个List<String>(例如["j","a","v","a"]).我需要将这些列表收集到一个列表中.我试过了addAll,它工作正常:

List<String> listData = Arrays.asList("java","Stream","laMbdA");
List<String> resultList = new ArrayList<>();

listData.stream()
        .map(this::getList)  // acccepts String as an argument and returns List<String>
        .forEach(resultList::addAll);
Run Code Online (Sandbox Code Playgroud)

如果我尝试Collectors.toList(),我会得到一个List<List<String>>

 listData.stream()
         .map(this::getList)
         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

有什么方法Collectors可以代替addAll吗?

java stream java-stream

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

替代多个嵌套for和if块

我正在尝试实现一个复杂的块,我使用多个for循环编写,如果条件更复杂的东西.最初的代码是

for(Coll_Monthly_Main monthlyAccount:monthlyList){
        for(Coll_Daily_Main dailyAccount:dailyList){
            if(monthlyAccount.getAccountId().trim().equals(dailyAccount.getAccountId().trim())){
                for(Catg_Monthly monthlyCategory: monthlyAccount.getCatg()){
                    for(Catg_Daily dailyCategory: dailyAccount.getCatg()){
                        if(monthlyCategory.getPriCatId().trim().equals(dailyCategory.getPriCatId().trim())){
                            monthlyCategory.setMthTtl(dailyCategory.getMthTtl());
                            monthlyCategory.setMtd(dailyCategory.getMtd());
                            monthlyCategory.setYtd(dailyCategory.getYtd());

                            for(SecCatDtl_Mthly monthlySecCategory:monthlyCategory.getSecCatDtl()){
                                for(SecCatDtl_Daily dailySecCategory:dailyCategory.getSecCatDtl()){
                                    if(monthlySecCategory.getCatId().trim().equals(dailySecCategory.getCatId().trim())){
                                        monthlySecCategory.setMthTtl(dailySecCategory.getMthTtl());
                                        monthlySecCategory.setMtd(dailySecCategory.getMtd());
                                        monthlySecCategory.setYtd(dailySecCategory.getYtd());
                                    }
                                }
                            }
                        }

                    }
                }
            }
        }
    }
    return monthlyList;
Run Code Online (Sandbox Code Playgroud)

我已经按照这个答案设法实现了第一级如下: -

monthlyList.forEach(coll_mthly->{
        dailyList.stream().filter(coll_daily->coll_mthly.getAccountId().trim().equals(coll_daily.getAccountId().trim()))
        .forEach(catg_mth->coll_mthly.getCatg())->{

        };
    });
Run Code Online (Sandbox Code Playgroud)

对于下一级嵌套,我需要循环嵌套列表,我不知道如何继续它.我不断收到如下语法错误: - 令牌上的语法错误,而不是TypeElidedFormalParameter

我很欣赏正确方向的任何指示.

更新: - 按照托马斯的回答,这就是它的样子

Map<String, Coll_Daily_Main> dailies = dailyList.stream().collect(Collectors.toMap(cdm -> cdm.getAccountId(), cdm-> cdm) );

    for(Coll_Monthly_Main monthlyAccount : monthlyList) {
        Coll_Daily_Main dailiesForAccount  = dailies.get( monthlyAccount.getAccountId().trim());

          Map<String, Catg_Daily> dailyCatgories=dailiesForAccount.getCatg().stream().collect(Collectors.toMap(cv->cv.getPriCatId(), cv->cv));
          for(Catg_Monthly monthlyCategory:monthlyAccount.getCatg()){
              Catg_Daily dailyCategory = …
Run Code Online (Sandbox Code Playgroud)

java foreach nested-loops java-8 java-stream

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

如何从数组的所有元素中减去常量值?

我有一个数组,例如我想从数组的所有元素中减去7.除了以下逻辑,我该怎么做呢.

for (int i = 0; i < array.length; i++)
{
    array[i]-=7;
}
Run Code Online (Sandbox Code Playgroud)

任何相关的流都会有所帮助.

编辑 - 它不应该是一个数组.它也可以是ArrayList.

java java-8 java-stream

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

Java 8中是否存在如何在最小大小条件下从列表中删除项目?

我想从列表中删除一个项目,如果它不是集合中的最后一个.

例如:

List<String> items = ....
Iterator<String> it = items.iterator();
while (it.hasNext() && items.size() > 1) {
String item = it.next();
   if (condition(item)) {
     it.remove();
   }
}
Run Code Online (Sandbox Code Playgroud)

是否可以通过在Java 8中使用流以更优雅的方式执行相同的操作?

java java-8 java-stream

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