繁体   English   中英

如何使用使用.map lambda表达式的操作每次使用与列表不同的值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM