是否可以将Java Collections排序方法与比较器一起使用,因为它会对一个列表进行排序,以便按原始列表的索引对另一个列表进行排序,以便列表保持配对?谢谢.
我知道对于数组,你可以这样在二维数组中添加一个元素:
array[0][1] = 17; //just an example
Run Code Online (Sandbox Code Playgroud)
我怎么能用ArrayList做同样的事情?
对于任何可能有这样问题的人,你可能需要"Collections.sort",而不是"Collection.sort",这是我在下面犯的错误.
我定义了一个定义为的类
public class Store implements Serializable, Comparable<Store> { ... }
Run Code Online (Sandbox Code Playgroud)
我在另一个类中有一个字段定义为:
ArrayList<Store> fStores = new ArrayList<Store>();
Run Code Online (Sandbox Code Playgroud)
我想对这个集合进行排序,所以在我调用的方法中:
Collection.sort(fStores);
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下编译错误:
The method sort(ArrayList<Store>) is undefined for the type Collection
Run Code Online (Sandbox Code Playgroud)
ArrayList实现List,并从文档中:
public static <T extends Comparable<? super T>> void sort(List<T> list)
Run Code Online (Sandbox Code Playgroud)
那么,为什么我会收到错误?我也尝试创建自己的Comparator后代,并将其传递给sort方法,但没有运气.
我猜这里有一些关于"<T延伸可比较<?超级T>>"我不理解......?
我有一个带有几个项目的LisView.为此我连接了OnItemClickListener(作为内部类),如下所示:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ShoppingListApp02Activity.this, "List item selected:" +
items.get(position).getId(), Toast.LENGTH_LONG).show();
}
});
Run Code Online (Sandbox Code Playgroud)
很明显,选择一个entriy会显示该条目对象的元素,在本例中是所选Item对象的ID(不是列表ID,而是创建ArrayList项时设置的对象ID).这很好用,让我可以用选定的项目做任何我想做的事情.
现在我想要一个"长按"监听器,打开所选ListView项的上下文菜单.我怎么做?我已经能够将一个onCreateContextMenu监听器附加到ListView,但是我没有看到如何使用onItemClickListener获取ArrayList的元素?
这是我得到的:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.add(0, v.getId(), 0, "Something");
menu.add(0, v.getId(), 0, "Something else");
}
Run Code Online (Sandbox Code Playgroud)
由于OnCreateConextMenu采用与OnItemClickListener不同的参数,如何在OnItemClickListener中访问ArrayList的元素?
我想在java代码中创建一个数组列表的自定义分页
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Sort.Direction;
...
int page = 0;
int count = 8;
String sortOrder = "desc";
String sortBy = "id";
Sort sort = new Sort(Direction.fromString(sortOrder), sortBy);
PageRequest pageable = new PageRequest(page, count, sort);
List<Impianto> impiantos = myService.findMyMethod(); // returned 30 objects
Page<Impianto> pageImpianto = new PageImpl<Impianto>(impiantos, pageable, impiantos.size());
Run Code Online (Sandbox Code Playgroud)
上面的脚本不会返回包含8个元素的页面.为什么?
NB列表没有从db返回
你能帮助我吗?
ArrayList<Integer> a =new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> j =new ArrayList<ArrayList<Integer>>();
a.add(1);
a.add(2);
a.add(3);
for(int c=0; c<10; c++){
j.add(a);
}
j.get(3).add(1);
System.out.println(j);
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这个代码为j的每个元素添加1而不是只有第三个元素,我该怎么做才能解决这个问题?
我知道我们可以随机排序DataList以下内容:
$example = Example::get()->sort('RAND()');
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试随机排序时,ArrayList它不起作用.我可以在排序ArrayList的ID DESC,但不能用RAND().
有没有办法ArrayList随机对其项目进行排序?
例:
public function AllTheKits() {
$kits = Versioned::get_by_stage('KitsPage', 'Live');
$kitsArrayList = ArrayList::create();
foreach ($kits as $kit) {
if ($kit->MemberID == Member::currentUserID()) {
$kitsArrayList->push($kit);
}
}
return $kitsArrayList;
}
Run Code Online (Sandbox Code Playgroud)
在一个页面中:
public function getKitsRandom() {
return $this->AllTheKits()->sort('RAND()');
}
Run Code Online (Sandbox Code Playgroud)
这在带有的模板中不起作用 <% loop KitsRandom %>
我需要分离和计算arraylist中的多少个值是相同的,并根据出现的次数打印它们.
我有一个名为数字的arraylist:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
Run Code Online (Sandbox Code Playgroud)
我创建了一个方法来分隔每个值并将其保存到一个新数组.
public static ArrayList<Integer> myNumbers(int z) {
ArrayList<Integer> digits = new ArrayList<Integer>();
String number = String.valueOf(z);
for (int a = 0; a < number.length(); a++) {
int j = Character.digit(number.charAt(a), 10);
digits.add(j);
}
return digits;
}
Run Code Online (Sandbox Code Playgroud)
在此之后,我有一个名为数字的新数组.我在这个数组上使用sort
Collections.sort(numbers);
Run Code Online (Sandbox Code Playgroud)
我的ArrayList看起来像这样:
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, …Run Code Online (Sandbox Code Playgroud) 我正在使用自定义实现DiffUtil回调比较两个列表以查找它们之间的差异,但是这两个列表具有不同的大小,并且当我在比较的'areItemsTheSame'和'areContentsTheSame'元素的两个列表中记录要比较的元素时,受包含最少元素的列表大小的限制,因此在我的适配器中调用“ dispatchUpdatesTo”时,将添加新项,但其内容与旧列表中的最后一项相同
这些方法的实现:
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return mOldList.get(oldItemPosition).equals(mNewList.get(newItemPosition));
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return mOldList.get(oldItemPosition).equals(mNewList.get(newItemPosition));
}
Run Code Online (Sandbox Code Playgroud)
例如:
(旧)列表A =“ A”,“ B”,“ C”,“ D”,“ E”,“ F”,“ G”,“ I”
(新)列表B =“ A”,“ B”,“ C”,“ D”,“ E”,“ F”,“ G”,“ I”,“ K”
在登录时,我发现“ areItemsTheSame”和“ areContentsTheSame”仅将元素最多与“ I”进行比较,因此对于所有调用均返回true,并且在为适配器调用dispatchUpdatesTo之后,将新项添加到列表中,但它是“ I”而不是“ k”
所以我得到的是列表A =“ A”,“ B”,“ C”,“ D”,“ E”,“ F”,“ G”,“ I”,“ I”
我想以最短的方式初始化我的Dto列表.现在我正在使用:
public List<SomeItemDto> itemsToDto(List<SomeItem> items) {
List<SomeItemDto> itemsDto = new ArrayList<SomeItemDto>();
for (SomeItem item : items) {
itemsDto.add(itemToDto(item));
}
return itemsDto;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让它成为一个单行程?
arraylist ×10
java ×7
sorting ×3
android ×2
collections ×1
contextmenu ×1
java-8 ×1
java-stream ×1
list ×1
pagination ×1
php ×1
silverstripe ×1
spring ×1