Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用属性从列表中提取对象?_Java_List - Fatal编程技术网

Java 如何使用属性从列表中提取对象?

Java 如何使用属性从列表中提取对象?,java,list,Java,List,我有两个不同类型的对象: Class1 A List<Class2> B 我想得到B的元素,比如A.fieldX==C.fieldY 不在列表上进行迭代是否可以做到这一点?在列表中不进行某种形式的迭代是不可能做到这一点的,但是如果您更改为映射,您可以使用以下代码来解决这一问题: Map<FieldYType, Class2> B= new HashMap(); B.put(c.fieldY, C); Class2 D = B.get(A.fieldX); D==C;//

我有两个不同类型的对象:

Class1 A
List<Class2> B
我想得到B的元素,比如
A.fieldX==C.fieldY


不在列表上进行迭代是否可以做到这一点?

在列表中不进行某种形式的迭代是不可能做到这一点的,但是如果您更改为映射,您可以使用以下代码来解决这一问题:

Map<FieldYType, Class2> B= new HashMap();
B.put(c.fieldY, C);
Class2 D = B.get(A.fieldX);
D==C;//true
D.fieldY==A.fieldX;//true
Map B=newhashmap();
B.put(c.fieldY,c);
Class2d=B.get(A.fieldX);
D==C//真的
D.fieldY==A.fieldX//真的

所以在这里你根本不需要迭代,你只需要使用一个get函数。您可能还希望使用不同的映射类型,但这取决于您和您的代码设计

如果对象在列表中时字段没有更改,则可以使用集合地图(或列表或集合,具体取决于您的需要)来进行比较:

Map<Field, List<Class2>> map = new HashMap<>();
Map Map=newhashmap();
插入:

Class2 c = new Class2();

List<Class2> bucket = map.get(c.fieldY);
if( null == bucket ){
    bucket = new ArrayList<>();
    map.put( c.fieldY, bucket );
}
bucket.add( c );
Class2 c=newclass2();
List bucket=map.get(c.fieldY);
if(null==存储桶){
bucket=newarraylist();
地图放置(c.fieldY,bucket);
}
添加(c);
查阅:

List<Class2> result = map.get( a.fieldX );
List result=map.get(a.fieldX);

只有当对象在列表映射中时字段不改变时,这才有效,而且只有在经常进行这些查找时,这样做才有意义。

我不这么认为。真正开始迭代的唯一方法是进行映射,这意味着改变底层数据结构。不知道您是否想要/能够做到。数据结构不是固定的,但我不知道映射将如何改变问题。你能说得更具体一点吗?我会在一分钟内回答。如果关键字段保持不变(也就是说,fieldY的值总是用于从列表中剔除对象),那么使用
映射(其中fieldY是fieldY的类型)因此,您可以简单地从地图中提取所有具有所需fieldY值的Class2对象。您可能想看看这个问题:@anubhava唯一性似乎是基于OPs问题的假设,但如果它不是唯一的,您可以拥有地图;然后,当您执行B.get()时,您会得到一个列表,并可以使用其他内容作为唯一标识符。如果您从map中得到一个列表,那么您的情况不会与OP试图避免的情况相同,即迭代列表。@anubhava至少您可能需要迭代的内容非常少,这对行动会有很大帮助。但如果这真的与你有关,你可以再放一张地图。所以你会有地图;
List<Class2> result = map.get( a.fieldX );