Tag: 集合

用于在HashMap中添加List的快捷方式

我经常需要获取对象列表,并根据对象中包含的值将它们分组到一个Map中。 例如。 按国家列出用户和组。 我的代码通常是这样的: Map<String, List<User>> usersByCountry = new HashMap<String, List<User>>(); for(User user : listOfUsers) { if(usersByCountry.containsKey(user.getCountry())) { //Add to existing list usersByCountry.get(user.getCountry()).add(user); } else { //Create new list List<User> users = new ArrayList<User>(1); users.add(user); usersByCountry.put(user.getCountry(), users); } } 然而,我不禁认为这是尴尬的,有些大师有更好的方法。 到目前为止,我能看到的最接近的是来自Google Collections的MultiMap 。 有没有标准的方法? 谢谢!

根据键的子集过滤映射的元素,而不必遍历整个事物

我有一个Map<String, ArrayList>和一个Set<String> 。 有没有一种方法可以将地图的键与string集“交叉”,从而只保留具有给定键的对,而不会迭代整个地图? 我主要关心的是performance,重新发明可以更优雅地完成的事情。

如何将types集合转换为ArrayList?

public class MyGraph<V,E> extends SparseMultigraph<V,E>{ private ArrayList<MyNode> myNodeList; public MyNode getNode(int nodeId){ myNodeList = new ArrayList<MyNode>(); myNodeList = (ArrayList<MyNode>)this.getVertices(); int i; 以下是错误消息: 线程“main”中的exceptionjava.lang.ClassCastException:java.util.Collections $ UnmodifiableCollection不能转换为java.util.ArrayList … 谁能帮忙?

将两个列表合并成一个映射(Java)最清晰的方法?

使用for (String item: list)会很好,但是它只会遍历一个列表,并且你需要一个明确的迭代器用于另一个列表。 或者,你可以使用一个显式的迭代器。 下面是这个问题的一个例子,以及一个使用索引for循环的解决scheme: import java.util.*; public class ListsToMap { static public void main(String[] args) { List<String> names = Arrays.asList("apple,orange,pear".split(",")); List<String> things = Arrays.asList("123,456,789".split(",")); Map<String,String> map = new LinkedHashMap<String,String>(); // ordered for (int i=0; i<names.size(); i++) { map.put(names.get(i), things.get(i)); // is there a clearer way? } System.out.println(map); } } 输出: {apple=123, orange=456, pear=789} […]

IQueryable,ICollection,IList和IDictionary接口之间的区别

我正在尝试理解IQueryable,ICollection,IList和IDictionary接口之间的区别,它对于迭代,索引,查询等基本操作更为快捷。 像集合,列表,词典等类,将是很好的启动这些接口,我们应该什么时候使用这些类。 使用这些类相对于其他类的基本优势。 我尝试阅读其他类似问题的post,但没有回答我的全部问题。 谢谢您的帮助。

如何修改或删除可枚举集合中的项目,同时在C#中迭代

我必须从数据表中删除一些行。 我听说在迭代中更改集合是不正确的。 所以,而不是一个for循环中,我检查行是否符合删除的要求,然后将其标记为删除,我应该先遍历数据表,并添加列表中的所有行,然后遍历列表和标记删除的行。 这是什么原因,我有什么替代品(而不是使用行列表我的意思)?

有没有java.util.concurrent相当于WeakHashMap?

下面的一段代码是否可以使用Collections.synchronizedMap()重写而不保持并发性的正确性? Collections.synchronizedMap(new WeakHashMap<Class, Object>()); 即有什么来自java.util.concurrent可以用来代替? 请注意,只是replace为 new ConcurrentHashMap<Class, Object>(new WeakHashMap<Class, Object>())); 显然是行不通的

MVVM和VM的集合

一个常见的senario:一个包含一系列项目模型的模型。 比如有一群人的房子。 如何正确地为MVVM构造 – 特别是关于使用添加和删除来更新Model和ViewModel集合? Model House包含模型People (通常是List<People> )的集合。 查看模型HouseVM包含它封装的House对象和视图模型PeopleVM ( ObservableCollection<PeopleVM> )的ObservableCollection<PeopleVM> 。 请注意,我们最后在HouseVM中持有两个集合(需要同步): 1. HouseVM.House.List<People> 2. HouseVM.ObservableCollection<PeopleVM> 当House更新为新的People(add)或People leave(remove)时,现在必须在两个集合中处理Model House People集合和 VM HouseVM PeopleVM ObservableCollection。 这个结构是否正确的MVVM? 是否有避免必须执行添加和删除的双重更新?

Automapper:使用Entity Framework 4 Proxy Pocos在inheritance上映射问题,在集合上映射抽象基类

我有一个问题,使用AutoMapper(这是一个很好的技术)来映射一个业务对象到一个DTO的地方,我从集合中的抽象基类inheritance。 这是我的对象: abstract class Payment class CashPayment : Payment class CreditCardPayment : Payment 我还有一个发票对象,其中包含如下付款的集合: public class Invoice { … properties… public ICollection<Payment> Payments { get; set; } } 我也有这些对象的每个相应的DTO版本。 DtoInvoice对象被定义为: [DataContract] public class DtoInvoice { …properties… [DataMember] public List<DtoPayment> Payments { get; set; } } 这就是我的Mapper定义的样子: Mapper.CreateMap<Invoice, DtoInvoice>(); Mapper.CreateMap<Payment, DtoPayment>() .Include<CashPayment, DtoCashPayment>() .Include<CreditCardPayment, DtoCreditCardPayment>(); Mapper.CreateMap<CashPayment, […]

如何最好地比较Java中的两个集合并采取行动?

我有两个相同的对象集合, Collection<Foo> oldSet和Collection<Foo> newSet 。 所需的逻辑如下: 如果foo在(*) oldSet但不是newSet ,则调用doRemove(foo) 否则如果foo不在oldSet而是在newSet ,则调用doAdd(foo) 否则,如果foo在两个集合中都被修改,则调用doUpdate(oldFoo, newFoo) else if !foo.activated && foo.startDate >= now ,调用doStart(foo) else if foo.activated && foo.endDate <= now ,call doEnd(foo) (*)“in”表示唯一标识符匹配,不一定是内容。 当前(遗留)代码会执行许多比较来计算removeSet , addSet , updateSet , startSet和endSet ,然后循环以对每个项目执行操作。 代码非常混乱(部分原因是我已经遗漏了一些意大利面条的逻辑),我试图重构它。 一些更多的背景信息: 据我所知, oldSet和newSet实际上是由ArrayList支持的 每套包含less于100个项目,最有可能超过20 这个代码经常被调用(以百万/天衡量),尽pipe这些集合很less有不同 我的问题: 如果我把oldSet和newSet转换成HashMap<Foo> (顺序不在这里),用ID作为关键字,它会使代码更容易阅读和更容易比较吗? 转换的时间和内存性能损失多less? 迭代这两个集合,并执行适当的操作更高效和简洁?