那么 List<Article> 和List<Map<String, Object>> 的区别之一是 自定义反向 getTitle er Map中是get("title") ,就是获取值的方法不一样
时间: 2023-11-11 14:50:36 浏览: 54
是的,你理解得很正确。
在 `List<Article>` 中,我们可以直接通过调用 `getTitle()` 方法来获取 `Article` 对象的标题属性。这是因为 `Article` 类中定义了 `getTitle()` 方法,可以直接返回标题值。
而在 `List<Map<String, Object>>` 中,我们需要使用 `get("title")` 方法来获取 `Map` 对象中键为 `"title"` 的对应值。这是因为 `Map` 对象是一种键值对的集合,它没有固定的属性和方法。所以我们需要通过键来获取相应的值。
总结一下区别:
- 在 `List<Article>` 中,我们可以直接调用对象的方法来获取属性值。
- 在 `List<Map<String, Object>>` 中,我们需要使用键来获取相应的值。
这也体现了面向对象和键值对集合两种不同的数据组织和访问方式。选择使用哪种方式取决于具体的需求和场景。
相关问题
当List<A>和List<B>以组合key进行match,将match成功的List<A>和List<B>分别出力。用java8写一个共通方法
可以使用Java 8的Stream API来实现这个共通方法。具体实现如下:
```java
public static <A, B, K> void matchListsByKeys(List<A> listA, List<B> listB, Function<A, K> keyExtractorA, Function<B, K> keyExtractorB, BiConsumer<List<A>, List<B>> matchConsumer) {
Map<K, List<A>> mapA = listA.stream().collect(Collectors.groupingBy(keyExtractorA));
Map<K, List<B>> mapB = listB.stream().collect(Collectors.groupingBy(keyExtractorB));
for (K key : mapA.keySet()) {
if (mapB.containsKey(key)) {
matchConsumer.accept(mapA.get(key), mapB.get(key));
}
}
}
```
这个方法有四个参数:
1. `listA`:第一个列表
2. `listB`:第二个列表
3. `keyExtractorA`:从第一个列表中的元素提取组合key的函数
4. `keyExtractorB`:从第二个列表中的元素提取组合key的函数
另外,还有一个`matchConsumer`参数,它是一个函数接口,用于接收成功匹配的`List<A>`和`List<B>`并进行处理。
这个方法的实现分为以下几步:
1. 使用`groupingBy`方法将第一个列表中的元素按照组合key分组,得到一个`Map<K, List<A>>`
2. 使用`groupingBy`方法将第二个列表中的元素按照组合key分组,得到一个`Map<K, List<B>>`
3. 遍历第一个`Map<K, List<A>>`,对于每个key,如果第二个`Map<K, List<B>>`中也包含该key,则调用`matchConsumer`函数接收对应的`List<A>`和`List<B>`
4. 完成匹配
使用这个方法的示例代码如下:
```java
List<Person> persons = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 25),
new Person("Charlie", 30),
new Person("Dave", 35)
);
List<Job> jobs = Arrays.asList(
new Job("Teacher", 20000),
new Job("Engineer", 30000),
new Job("Doctor", 40000),
new Job("Lawyer", 50000)
);
matchListsByKeys(persons, jobs, Person::getAge, Job::getSalary, (matchedPersons, matchedJobs) -> {
System.out.println("Matched persons: " + matchedPersons);
System.out.println("Matched jobs: " + matchedJobs);
});
```
这个示例代码将`persons`和`jobs`按照年龄和薪水进行match,并将匹配成功的`Person`和`Job`分别输出。其中,`Person`和`Job`类的定义如下:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return name + "(" + age + ")";
}
}
public class Job {
private String title;
private int salary;
public Job(String title, int salary) {
this.title = title;
this.salary = salary;
}
public String getTitle() {
return title;
}
public int getSalary() {
return salary;
}
@Override
public String toString() {
return title + "(" + salary + ")";
}
}
```
List<String> titleList = list1.stream().map(HomeworkVO::getTitle).collect(Collectors.toList());
这段代码使用 Java 8 中的 Stream API 对 `list1` 集合中的 `HomeworkVO` 对象进行处理,将每个对象的 `title` 属性提取出来,然后将这些 `title` 属性组成一个新的集合并返回。具体解释如下:
1. `list1.stream()` 将 `list1` 集合转换成一个 Stream 对象,以便进行后续的处理。
2. `map(HomeworkVO::getTitle)` 对 Stream 中的每个元素,调用 `HomeworkVO` 对象的 `getTitle()` 方法,将其转换成一个新的 Stream,其中每个元素是 `HomeworkVO` 对象的 `title` 属性。
3. `collect(Collectors.toList())` 将 Stream 中的元素收集到一个 List 集合中,返回结果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
HttpSession session = request.getSession(); List<NewInfor> list; NewsService newsService = new NewsService(); //查询所有新闻 list = newsService.getAllNews(); //存入 session.setAttribute("list", list); //跳转页面 request.getRequestDispatcher("/index.jsp").forward(request,response); List<NewInfor> list = (List<NewInfor>) session.getAttribute("list"); for (int i=0; i <%= newInfor.getTitle()%> <%= newInfor.getAuthor()%> <%= newInfor.getType()%> <%= newInfor.getTime()%> <% } %>
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
公告 2023-07-06T10:00+08:00
公告 2023-07-05T06:00+08:00 获取中中内容,以 class="index_title__6wUnB">和 ,class="index_date__7jmiW"位对象数组怎么编写代码![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)