我有一个foreach循环,读取一种类型的对象列表,并产生另一种类型的对象列表。有人告诉我,lambda表达式可以实现相同的结果。
var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>();
foreach(OrigType a in origList) {
targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}
我们将考虑第一个列表类型是字符串,并希望将其转换为整数类型的列表。
List<String> origList = new ArrayList<>(); // assume populated
在原始列表中添加值。
origList.add("1");
origList.add("2");
origList.add("3");
origList.add("4");
origList.add("8");
创建Integer类型的目标列表
List<Integer> targetLambdaList = new ArrayList<Integer>();
targetLambdaList=origList.stream().map(Integer::valueOf).collect(Collectors.toList());
使用forEach打印列表值:
targetLambdaList.forEach(System.out::println);
如果需要在从一个列表映射到另一个列表时进行强制转换,则可以从convertall调用一个函数来测试强制转换。
public int StringToInt(String value)
{
try
{
return Int32.Parse(value);
}
catch (Exception ex)
{
return -1;
}
}
[Fact]
public async Task TestConvertAll()
{
List<String> lstString = new List<String>{"1","2","3","4","5","6","7","8","9","10" };
List<int> lstInt = lstString.ConvertAll(new Converter<String, int>(StringToInt));
foreach (var item in lstInt)
{
output.WriteLine("{0}", item);
}
if (lstInt.Count()>0) {
Assert.True(true);
}
}