您可以使用Collection.sort(list)
对ArrayList
进行排序,但是AnimSprite
必须实现Comparable
接口,以使sort
方法知道如何比较两个{ {1}}个对象。
AnimSprite
另一种解决方案是使用接受public class AnimSprite implements Comparable
{
float x,y,z;
//...//
@Override
public int compareTo(AnimSprite o)
{
float result = this.z - o.z;
if (result == 0f) result = this.y - o.y;
return ((int)(result));
}
}
ArrayList<AnimSprite> listofsprites = new ArrayList<AnimSprite>();
//...//
listofsprites.add( new AnimSprite(1f,10f,0f) ); //x,z
listofsprites.add( new AnimSprite(15f,25f,1f) );
listofsprites.add( new AnimSprite(30f,-62f,0f) );
listofsprites.add( new AnimSprite(150f,2f) );
listofsprites.add( new AnimSprite(55f,-65f,0f) );
//...//
Collection.sort(listofsprites);
for (AnimSprite s: listofsprites) { s.draw();}
实现作为第二个参数的重载方法sort
,并使用Lambda expression
编写更少的代码:
Comparator
,
有两种简单的方法可以实现您想要的。两者都归结为数组元素之间应该是“可比较的”。
选项1:
在 def parse(self,response):
print('### SCANNED: %s',(response.request.url))
if len(response.css('script').getall()) > 0:
yield {
'domain': response.meta['domain'],'scripts': response.css('script').getall()
}
中实施 def process_item(self,item,spider):
domain = item['domain']
scripts = item['scripts']
for script in scripts: # There are about 15 scripts per item
for script_group in self.script_groups: # There are about 5000 script_groups
# Check all urls in script_group to see if script_group is being used
for url in script_group['urls']: # There are about 2 urls per script_group
# If at least one url found then script_group is being used
if url in script:
print("url found,script_group is being used")
break
return item
接口。定义Comparable
方法(自从实现接口以来,您将必须使用该方法)以依靠2个数字进行比较。
然后使用:
AnimSprite
选项2:
在您无法真正更改compareTo
类时可以使用。在这种情况下,您可以实现Collections.sort(yourArray);
接口,以有效地外部化比较逻辑:
AnimSprite
如果您使用的是Java 8+,当然也可以使用lambda
,
是的。您还可以执行以下操作:
Collections.sort(list,Comparator.comparing((AnimSprite a) -> a.z)
.thenComparing((AnimSprite a) -> a.y));
本文链接:https://www.f2er.com/3160405.html