我正在尝试有这样的方法签名:public static List FilterList(List collection,String FilterString,String Property=“”)
这样,我可以从任何地方调用这个方法,并传递给它任何列表,它将返回给我一个过滤的列表。
您可以使用LINQ执行您想要的操作,
var collection = ...
var filteredCollection =
collection.Where(item => item.Property == "something").ToList();
否则,您可以尝试反射,
public List<T> Filter<T>(
List<T> collection,
string property,
string filterValue)
{
var filteredCollection = new List<T>();
foreach (var item in collection)
{
// To check multiple properties use,
// item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)
var propertyInfo =
item.GetType()
.GetProperty(property, BindingFlags.Public | BindingFlags.Instance);
if (propertyInfo == null)
throw new NotSupportedException("property given does not exists");
var propertyValue = propertyInfo.GetValue(item, null);
if (propertyValue == filterValue)
filteredCollection.Add(item);
}
return filteredCollection;
}
此解决方案的问题是,对属性名称的更改或拼写错误会导致运行时错误,而不是编译错误,因为在使用实际属性表达式时,名称是硬类型的。
问题内容: 我有一个说“销售”的对象列表。我只需要其产品与另一个列表(例如saleProductList)中的对象匹配的Sales对象。 除了循环以外,还有没有更好的方法可以做到这一点。 问题答案: 如果您已经在使用Google的Guava库,则它具有Collections2.filter()方法,该方法将仅返回集合中与给定Predicate匹配的项。 但是,这是否能回答您的问题取决于您避免循环的
基本上,我希望使用过滤泛型(扩展集合),然后返回相同泛型集合实现的实例(最好是新实例),例如实现方法签名。 null null null 修改原始列表
我有以下控制器: 使用以下请求对象: 当帖子通过并查看我得到的对象时,有效负载列表中有LinkedHashMap对象,而不是我的DTO类型的对象。 如何让Spring jackson将JSON转换为我的DTO对象。请记住,我计划对其他对象列表重用包装器响应DTO,这就是我使用通用列表(List)的原因。 这是我正在尝试的JSON。
我正在尝试根据另一个列表中存在的值筛选一个列表。我已经经历了其他类似的问题,并试图利用这些来实现我的目标,但无法做到这一点。 列表1由类(L1)的对象组成 列表2由类(L2)的对象组成 因此,筛选后,列表1将不包含,因为该模型与中的不匹配。 我怎么能这么做?
我想通过Google Gson传输一个列表对象,但我不知道如何反序列化泛型类型。 我在看了这个之后尝试了什么(Balusc的回答): 编辑: 现在我有 但是,我确实在“FromJson”行得到以下异常: null
上述代码的输出是: 但是我很困惑为什么list1没有被修改,因为list1和list2都首先引用同一个列表对象。有人能帮我理解这里到底发生了什么吗?