我已经尝试了我所知道的一切以及我在网上找到的任何东西,但它只是不起作用.我一直在:
java.lang.ClassCastException:java.util.LinkedHashMap无法强制转换为com.mycompany.myproject.dto.MyDto
如果有人能在下面的代码中告诉我我做错了什么,我将不胜感激:
List<Map<Long, MyDto>> dtoList = restTemplate.getForObject(myRestUrl + "/some-path/dtoInfo/" + ids, List.class);
Map<Long, MyDto> myMap = dtoList.get(0);
System.out.println("myMap SIZE is: " + myMap.size());
System.out.println("myMap is: " + myMap);
List<MyDto> dtos = new ArrayList<MyDto>(myMap.values());
StringJoiner sj = new StringJoiner(",");
for(MyDto obj : dtos) {
sjStoreIds.add(obj.getId());
}
Run Code Online (Sandbox Code Playgroud)
REST调用返回一个List,其中包含一个HashMap对象,其中"Key"类型为Long,而"Value"类型为MyDto.然后我打印地图的"大小"和地图本身.两者都打印正确和预期的信息.
然后我从地图中提取值列表,如下所示:
List<MyDto> dtos = new ArrayList<MyDto>(myMap.values());
Run Code Online (Sandbox Code Playgroud)
没问题.
但是,当我尝试通过转换列表中的对象(dtos)时,如下所示:
for(MyDto obj : dtos) {
sjStoreIds.add(obj.getId());
}
Run Code Online (Sandbox Code Playgroud)
我得到java.lang.ClassCastException:java.util.LinkedHashMap中不能被强制转换为com.mycompany.myproject.dto.MyDto用于为(MyDto OBJ:DTOS){一部分.
现在旋转我的大脑超过2个小时.:(
我相信它会变成一种非常基本的东西,一旦我知道它就会生气和尴尬,但有人可以告诉我我做错了吗?
编辑
以下是我在服务器端的REST实现: …
我正在使用ArrayList的iterator:
List<String> al = new ArrayList<>();
// ----- Logic for adding elements-----
Iterator it = al.iterator();
// logic to retrieve elements----
Run Code Online (Sandbox Code Playgroud)
然后它尝试使用ListIterator,就像这样.
ListIterator li = al.listIterator();
while(li.hasNext()) {
System.out.print(li.next()+" ");
}
Run Code Online (Sandbox Code Playgroud)
有效 ...
我试着这个用于反向检索
ListIterator li = al.listIterator();
while(li.hasPrevious()) {
System.out.print(li.previous()+" ");
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
以下代码正常运行.
ListIterator<String> li = al.listIterator(al.size());
while(li.hasPrevious()) {
System.out.println(li.previous()+" ");
}
Run Code Online (Sandbox Code Playgroud)
我想知道有一些泛型的概念,但不清楚它.请清除Iterator和ListIterator的概念.为什么ListIterator的一个语句正在运行另一个而不是?
我有两种方法来遍历包含键(String)和值(Arraylist)的哈希映射,并将Arraylists中的所有值添加到单个Arraylist中.
方法一不起作用,所以我创建了方法二,修复了问题,但我不确定为什么方法一不起作用.有人可以解释为什么方法二有效,方法一无效?
方法1
public ArrayList<Person> getPeopleList()
{
Iterator<ArrayList<Person>> iter = people.values().iterator();
ArrayList<Person> allPersons = new ArrayList<>();
while (iter.hasNext())
{
for (int i = 0; i < iter.next().size(); i++)
{
allPersons.add(iter.next().get(i));
}
}
return allPersons;
}
Run Code Online (Sandbox Code Playgroud)
方法2
public ArrayList<Person> getPeopleList()
{
Iterator<ArrayList<Person>> iter = people.values().iterator();
ArrayList<Person> allPersons = new ArrayList<>();
ArrayList<Person> persons;
while (iter.hasNext())
{
persons = iter.next();
for (Person p : persons)
{
allPersons.add(p);
}
}
return allPersons;
}
Run Code Online (Sandbox Code Playgroud) 我编写了一个程序,其中我有N个字符串和Q查询也是字符串.目标是确定每个查询在N个字符串中出现的次数.
这是我的代码:
import java.util.Scanner;
import java.util.ArrayList;
public class SparseArrays{
// count the number of occurances of a string in an array
int countStringOccurance(ArrayList<String> arr, String str){
int count = 0;
for (int i=0; i<arr.size(); i++) {
if (str==arr.get(i)) {
count += 1;
}
}
return count;
}
void start(){
// scanner object
Scanner input = new Scanner(System.in);
// ask for user to input num strings
System.out.println("How many string would you like to enter?");
// store the number of strings …Run Code Online (Sandbox Code Playgroud) 谁知道如何添加int[] array到2d ArrayList<ArrayList<Integer>>?
代码...
import java.util.ArrayList;
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) {
int[] intArray = {1,1,1,1};
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
list.add(new ArrayList<Integer>(Arrays.asList(intArray))); // <- compile error
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个枚举,我可以从Enum.values()中获取值,我需要遍历它们并对除了一个值之外的所有值起作用,我正在考虑两种避免对这个值进行排除的方法.第一个是创建值列表并删除我不需要的值,如下所示:
List<ObjectEnum> oList= new ArrayList<ObjectEnum>();
Collections.addAll(itinerarySortPriceCriteriaList,ItinerarySortPriceCriteria.values());
oList.remove(ObjectEnum.UNWANTED_ENUM_VALUE);
Run Code Online (Sandbox Code Playgroud)
然后迭代该列表并使用每个循环的公共对象进行操作.
我正在考虑的另一种方法是迭代所有ObjectEnum值并使用if跳过对我不想采取行动的行为,如下所示:
for (ObjectEnum o: ObjectEnum.values()) {
if(!o.equals(ObjectEnum.UNWANTED_ENUM_VALUE)) {
doThings();
}
}
Run Code Online (Sandbox Code Playgroud)
你看到它们中的任何一个有什么优点,哪一个你觉得更具可读性?谢谢.
这是针对Java6每天生产20MM的请求.
我想从某个过滤器上的列表中删除对象,并且有多个对象.
list.stream().filter(g->g.getName().equalsIgnoreCase("String")).forEach(result ->{
/* is it possible to get the index of the result here?
.remove(), will iterate through the list again. I don't want that.
*/
list.remove(result);
});
Run Code Online (Sandbox Code Playgroud) 我有一个具有此属性的模型
public class Audit extends BaseModel implements Comparable {
@Column
@PrimaryKey
@SerializedName("audit_id")
private int id;
@Column
@SerializedName("address_line_1")
private String addressLine1;
@Column
@SerializedName("address_line_2")
private String addressLine2;
@Column
@SerializedName("city_name")
private String city;
@Column
@SerializedName("zip_code")
private String zipcode;
@Column
@SerializedName("company_id")
private int companyId;
@Column
@SerializedName("company_name")
private String companyName;
@Column
@SerializedName("loc_name")
private String location;
@Column
@SerializedName("inspection_date_time")
private OffsetDateTime inspectionTime;
@Column
@SerializedName("inspection_number")
private String inspectionNumber;
@Column(defaultValue = "0")
private int auditStatus;
@Column(defaultValue = "0")
private int userId;
public int getId() {
return id;
}
public …Run Code Online (Sandbox Code Playgroud) 我正在研究这个非常小的项目,我有一个汽车对象的arraylist,我试图按价格升序打印所有的汽车.当我环顾四周时,似乎每个人都使用数组而不是arraylist?
关于如何使用数组列表实现这一点的任何想法?以下是我的代码.
public ArrayList<Car> sortPriceAcending(ArrayList<Car> cars) {
ArrayList<Car> sortedCars = new ArrayList<Car>();
Car temp;
for (int j = 0; j < cars.size() - 1; j++) {
for (int i = 0; i < cars.size() - 1; i++) {
Car car = (Car) cars.get(i);
Car car1 = (Car) cars.get(i + 1);
if (car.getPrice() > car1.getPrice()) {
temp = car;
cars.get(i) = cars.get(i + 1);
cars.get(i + 1) = temp;
sortedCars = cars;
}
}
}
return sortedCars;
}
Run Code Online (Sandbox Code Playgroud) 如果它不以13开头,我需要从数组列表中删除一个字符串.我已经在数据文件中读取并且每一行都作为字符串读入ArrayList.如果它不以13开头,则需要删除整行.下面显示了读入的数据文件的示例:
13 0 150801 00133990 04 04 1 078 2160 999 1 0 1 0 16 04 07 058 0320 061 0127 068 0546 033 0129 048 0586 042 0133 033
13 0 150801 00140480 04 04 1 086 1730 999 1 0 1 0 13 04 06 047 0309 039 0143 032 0772 017 0131 029 0140 037
13 0 150801 00141320 04 04 1 075 1660 999 1 0 1 0 13 03 06 053 0319 036 0132 …Run Code Online (Sandbox Code Playgroud)