Tag: list

Java Streams – 从另外两个列表中获取“对称差异列表”

我试图使用Java 8流来组合列表。 如何从两个现有列表中获取“对称差异列表”(仅存在于一个列表中的所有对象)。 我知道如何获得交叉列表以及如何获取联合列表。 在下面的代码中,我想要来自两个汽车列表(bigCarList,smallCarList)的不相交的汽车。 我希望结果能够列出2辆车(“丰田卡罗拉”和“福特福克斯”) 示例代码: public void testDisjointLists() { List bigCarList = get5DefaultCars(); List smallCarList = get3DefaultCars(); //Get cars that exists in both lists List intersect = bigCarList.stream().filter(smallCarList::contains).collect(Collectors.toList()); //Get all cars in both list as one list List union = Stream.concat(bigCarList.stream(), smallCarList.stream()).distinct().collect(Collectors.toList()); //Get all cars that only exist in one list //List disjoint […]

在进行实例化列表时,是什么类型的?

我在多个不同的地方看到过实例化列表或ArrayList的人: List l = new ArrayList(); 什么类型?? 这是否意味着它可以包含任何类型? 如果是这样,为什么要使用它而不仅仅是和ArrayList?

搜索排序列表最近和小于

考虑一些long叫做X和一个有序的List 。 在List中找到索引或值的最有效算法是什么(i)小于X ,以及(ii)在数字行上最接近X (假设条件(i)已被饱和)? 例如,这可能是一个问题设置: long X = 500; List foo = new Arraylist(); foo.add(450L); foo.add(451L); foo.add(499L); foo.add(501L); foo.add(550L); Collections.sort(foo); // It’s always sorted. 我希望算法返回499或返回与499相关的索引(在这种情况下i=2 )。

如何在Java中返回线程安全/不可变的集合?

在我编写的项目中,我需要从函数返回一个线程安全且不可变的视图。 但是,我不确定这一点。 由于synchronizedList和unmodifiableList只返回列表的视图,我不知道是否 Collections.synchronizedList(Collections.unmodifiableList(this.data)); 会做的伎俩。 任何人都可以告诉我这是否正确,如果不是,有什么情况可能会失败吗? 感谢您的任何投入!

Google Collections中的懒惰不可修改列表

我正在寻找一个通用的懒惰不可修改列表实现的一个不错的实现来包装我的搜索结果条目。 任务的不可修改部分很容易,因为它可以通过Collections.unmodifiableList()实现,所以我只需要理清惰性部分。 令人惊讶的是, 谷歌collections品没有提供任何东西; 而来自Apache Commons Collections的LazyList不支持generics。 我发现尝试在google-collections之上构建一些东西,但它似乎是不完整的(例如,不支持size() ),过时的(不用1.0最终编译)并需要一些外部类,但可以用作建立自己的课程的一个很好的起点。 是否有人知道LazyList的任何良好实现? 如果没有,您认为哪个选项更好: 编写我自己的实现,基于google-collections ForwardingList,类似于Peter Maas所做的; 在Commons Collections LazyList周围编写我自己的包装器(包装器只会添加generics,所以我不需要在任何地方进行转换,只能在包装器本身中进行转换); 只需在java.util.AbstractList上面写一些东西; 欢迎任何其他建议。 编辑:解释为什么我需要一个懒惰的列表。 我有一个Lucene搜索结果(TopDocs),它基本上是Lucene文档的一堆指针。 我的搜索结果类将这些指针作为输入并返回由提取的和以其他方式处理的Lucene文档组成的对象列表。 通过将所有内容包装到一个惰性列表中,我希望确保在不必要时不进行昂贵的处理。

从Java中的列表中选择多个随机元素

所以说我有 List teamList = new LinkedList() teamList.add(“team1”); teamList.add(“team2”); teamList.add(“team3”); teamList.add(“team4”); teamList.add(“team5”); teamList.add(“team6”); 是否有一种简单的选择方法…以随机方式说明该列表中的6个元素中的3个而不选择相同的元素两次(或更多次)?

有没有办法获取JList中的所有元素?

我想知道是否有办法检索已添加到JList的所有元素的列表。 例如,我希望JList从自定义单元格渲染器返回一个数组或字符串或JLabel列表。

在Java中将数据从HashSet移动到ArrayList

我在Java中有以下Set : Set< Set > SetTemp = new HashSet< Set >(); 我想将其数据移动到ArrayList : ArrayList< ArrayList > List = new ArrayList< ArrayList >); 有可能吗?

无法理解如何在java中定义List列表

我想了解两个定义之间的区别以及为什么正确的定义是正确的,错误是错误的。 那个显示编译错误的那个 List<List> arr2 = new ArrayList<ArrayList>(); 它给我的错误: try2.java:8: error: incompatible types: ArrayList<ArrayList> cannot be converted to List<List> List<List> arr2 = new ArrayList<ArrayList>(); 工作的那个: List<ArrayList> arr = new ArrayList<ArrayList>(); 注意: 我理解为什么下面这个有效: List arr = new ArrayList(); 编辑-1 : 现在我只想了解List<List> arr2 = new ArrayList<ArrayList>();出了什么问题List<List> arr2 = new ArrayList<ArrayList>();

java-8过滤列表而不创建新列表

我正在寻找一种最简单的方法来过滤Java-8中的列表,使用简单的lambda Predicate , 而无需创建新列表 。 特别是,这个解决方案不合适,因为toList()返回一个新的List : List beerDrinkers = persons.stream() .filter(p -> p.getAge() > 16) .collect(Collectors.toList()); 请注意,以下解决方案也不起作用,因为列表应该是原始值的clear() ed(但很明显,如果在过滤之前清除它,则没有任何内容可以过滤…): persons.stream() .filter(p -> p.getAge() > 16) .forEach((p) -> persons.add(p)); (另外,我更喜欢不涉及使用第三方库或框架的解决方案)