![](/img/trans.png)
[英]Improve Map/Reduce lambda expression by using a different BigDecimal attribute each time
[英]How do I apply an operation using .map lambda expression using a different value from a list each time?
原谅我的标题,我不确定该如何阐明这个问题。
无论如何,我的问题是这个。
function(object o, String a) {
stuff;
return new object o;
}
我将如何做到这一点,以便在使用.map
lambda表达式时,可以将此操作按顺序应用于流中的每个变量,以便我可以像这样调用函数.map(l -> function(l, stringArraylist))
以便该函数在其arraylist中的等效位置应用该字符串,因为L在其自己的流中。
该函数在其arraylist中的等效位置申请字符串,因为L在其自己的流中
这有点含糊,但是似乎您想将function
应用于属于两个集合的成对元素(第一个集合的类型未指定-我们称它为SomeClass
另一个是ArrayList<String>
)。
目前尚不清楚应该执行什么function
,因为它不是有效的Java方法,但是基于return语句,我假设它应返回与参数o
相同类型的实例:
SomeClass function(SomeClass o, String a) {
// some logic
return some new instance of SomeClass
}
为了配对两个集合的元素,您可以创建索引的IntStream
(假设两个集合具有相同数量的元素)。
因此,假设您有Collection<SomeClass>
和ArrayList<String>
,则可以编写:
Collection<SomeClass> first = ...
ArrayList<String> second = ...
IntStream.range(0,first.size())
.mapToObj (i -> function(first.get(i),second.get(i)))
...
这将导致通过在每对元素上应用function
来创建Stream<SomeClass>
。 您可以将这些元素收集到List<SomeClass>
或进行任何其他必需的处理。
例如:
List<SomeClass> output =
IntStream.range(0,first.size())
.mapToObj (i -> function(first.get(i),second.get(i)))
.collect(Collectors.toList());
我想问您有关如何在特定流的map方法中使用Java 8中的Function<T,R>
。 这里有个例子:
List<String> list = Arrays.asList("1","2","3","4","5");
// Both functions are equivalent, I write both to clarify the concept using lambda expression.
//Function<? super String, ? extends Integer> function = stringElement -> Integer.parseInt(stringElement);
Function<? super String, ? extends Integer> function = Integer::parseInt;
list.stream().map(function);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.