java - 使用 Java Stream 将 map 方法的参数添加到 foreach 方法
问题描述
我写了一个小例子来解释我的问题:
import java.util.Arrays;
import java.util.List;
public class Example {
public static void main( String[] args ) {
String [] array = {"1 0101 5","1 0101 5"};
Arrays.stream(array)
.map(str->str.split(" "))//every String is mapped to an array of String
.map(arr-> returnAListOf5Element( Integer.parseInt(arr[0]),arr[1],Integer.parseInt(arr[2])))
.forEach(list-> tesMyList(list));//i want to send the Integer.parseInt(arr[2]) as a second argument
}
/**
*
* test if the list has size of 5
*/
private static void testMyList(List<Integer> myList) {
if (myList.size()==5)
System.out.println("Ok");
}
/**
*
* return a list of 5 element
* @return
*/
private static List<Integer> returnAListOf5Element( int i, String s, int i1 ) {
List list = Arrays.asList(1,2,3,4,5);
return list;
}
}
所以我有一些字符串,如“1 0101 5”、“1 0101 5”......,我使用流操作进行一些计算。
问题是我想将在 map 方法中找到的参数 arr[2] 添加到在 foreach 方法中找到的testMyList方法中。
方法testMyList应该是这样的:
private static void testMyList(List<Integer> myList, int size) {
if (myList.size()==size)
System.out.println("Ok");
}
解决方案
我可以看到三种可能的解决方案:
returnAListOf5Element
arr[2]
在列表中 返回。(假设通过联系,它是返回列表中的最后一个元素。)这是一种肮脏的方法。map
返回Map.Entry<List<Integer>, Integer>
由returnAListOf5Element(...)
调用结果和组成的 aarr[2]
。这是一种更合理的方式。
这两个 ide 基于上一个操作的缓存状态,因此您可以在下一个操作中获取它。这是获得之前链中计算的结果的唯一方法。
- 您将流链替换为一个简单的循环,其中每个中间计算都可以访问。
我发现最后一种方法是最简单和性能方面的。您似乎不会从这里的流中获得任何好处。我会坚持下去。
推荐阅读
- c# - 是否可以在瀑布对话框中设置带有日期输入的自适应卡片?(在 Web 和团队上使用 Bot Framework)
- docker - 使用 https 时的 Traefik 错误网关
- google-apps-script - 谷歌电子表格脚本显示了一些奇怪的行为
- linux - 如何获取文件中的特定数据并将其输出定向到新文件?
- c# - 我如何创建一个字符串数组并使其可用于我们的 C# 控制台应用程序中的所有方法
- python - 在函数中解包列表但在使用 MAP() 完成时不需要?
- python - Python - 计算列表中项目列表的出现次数?
- swift - 在 UINavigationBar 中的 searchBar isHidden 后取回标题
- python - 在 python 中拟合 digamma 函数时出错
- firebase - Flutter 中的 Firestore 查询