我只是好奇我是否可以切换它
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) 将诸如键"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) 我有这样的代码
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.为什么不删除它们?
为什么这段代码不能为我编译?
我尝试使用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)
这有什么不对?
我有一个数组String[],我想转换为数组Float[]
考虑e是String[]提供的通道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)
结果相同.
输入= M+a?i*n S=t
期望值= M a i n s t
每个角色从比较输入与字符的下面的列表,如果发现有空格替换它和输出中应expectedValue。
我有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吗?
我正在尝试实现一个复杂的块,我使用多个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) 我有一个数组,例如我想从数组的所有元素中减去7.除了以下逻辑,我该怎么做呢.
for (int i = 0; i < array.length; i++)
{
array[i]-=7;
}
Run Code Online (Sandbox Code Playgroud)
任何相关的流都会有所帮助.
编辑 - 它不应该是一个数组.它也可以是ArrayList.
我想从列表中删除一个项目,如果它不是集合中的最后一个.
例如:
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 ×10
java-stream ×10
java-8 ×5
collectors ×1
for-loop ×1
foreach ×1
nested-loops ×1
replace ×1
stream ×1