有一个泛型为user的list,取出其中name属性为张三或李四的,每种只取一个怎么写比较好
时间: 2024-02-06 09:11:12 浏览: 86
可以使用Java8的Stream API来解决这个问题,代码如下:
```java
List<User> userList = new ArrayList<>(); // 假设这是泛型为User的list
Optional<User> zhangSanUser = userList.stream()
.filter(user -> "张三".equals(user.getName()))
.findFirst();
Optional<User> liSiUser = userList.stream()
.filter(user -> "李四".equals(user.getName()))
.findFirst();
List<User> result = new ArrayList<>();
zhangSanUser.ifPresent(result::add);
liSiUser.ifPresent(result::add);
```
首先,使用`stream()`方法将list转换为Stream对象,然后使用`filter()`方法过滤出符合条件的元素,接着使用`findFirst()`方法取出第一个符合条件的元素,最后使用`ifPresent()`方法将取出的元素添加到结果列表中。
注意,这里使用了`Optional`类型来处理可能不存在的情况,即如果list中不存在张三或李四,则不会往结果列表中添加元素。
相关问题
利用泛型作为形参,同一个json解析出不一样的集合对象
可以使用Java中的泛型来实现,具体的步骤如下:
1.定义一个泛型方法,方法参数为Json字符串和Class类型,返回值为泛型集合对象。
```java
public static <T> List<T> parseJsonToList(String json, Class<T> clazz) {
List<T> list = new ArrayList<>();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
T obj = new Gson().fromJson(jsonObject.toString(), clazz);
list.add(obj);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
```
2.调用该泛型方法,传入Json字符串和Class类型,即可得到不同类型的泛型集合对象。
例如,如果要将以下Json字符串解析为List<User>对象:
```json
[
{"id":1,"name":"张三","age":18},
{"id":2,"name":"李四","age":20},
{"id":3,"name":"王五","age":22}
]
```
可以这样调用:
```java
String json = "[{\"id\":1,\"name\":\"张三\",\"age\":18},{\"id\":2,\"name\":\"李四\",\"age\":20},{\"id\":3,\"name\":\"王五\",\"age\":22}]";
List<User> userList = parseJsonToList(json, User.class);
```
如果要将以下Json字符串解析为List<Book>对象:
```json
[
{"id":1,"name":"Java编程思想","author":"Bruce Eckel","price":68.0},
{"id":2,"name":"Effective Java","author":"Joshua Bloch","price":55.0},
{"id":3,"name":"Java核心技术","author":"Cay S. Horstmann","price":89.0}
]
```
可以这样调用:
```java
String json = "[{\"id\":1,\"name\":\"Java编程思想\",\"author\":\"Bruce Eckel\",\"price\":68.0},{\"id\":2,\"name\":\"Effective Java\",\"author\":\"Joshua Bloch\",\"price\":55.0},{\"id\":3,\"name\":\"Java核心技术\",\"author\":\"Cay S. Horstmann\",\"price\":89.0}]";
List<Book> bookList = parseJsonToList(json, Book.class);
```
mybatis 抽出泛型通用增删改查
在Mybatis中,可以使用通用mapper插件来实现泛型通用增删改查操作。通用mapper插件提供了各种高效的工具,可以简化开发者的工作,提高代码质量和开发效率。
下面是使用通用mapper插件实现泛型通用增删改查的示例代码:
1. 引入通用mapper插件的依赖:
```xml
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
```
2. 创建实体类:
```java
public class User {
private Long id;
private String name;
// 省略getter和setter方法
}
```
3. 创建Mapper接口:
```java
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User> {
}
```
4. 在配置文件中配置通用mapper插件:
```xml
<configuration>
<!-- 其他配置 -->
<plugins>
<plugin interceptor="tk.mybatis.mapper.autoconfigure.MapperInterceptor">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
</plugin>
</plugins>
</configuration>
```
5. 使用通用mapper插件进行增删改查操作:
```java
@Autowired
private UserMapper userMapper;
// 查询所有用户
List<User> userList = userMapper.selectAll();
// 根据主键查询用户
User user = userMapper.selectByPrimaryKey(1L);
// 插入用户
User newUser = new User();
newUser.setName("张三");
userMapper.insert(newUser);
// 更新用户
User updateUser = new User();
updateUser.setId(1L);
updateUser.setName("李四");
userMapper.updateByPrimaryKey(updateUser);
// 删除用户
userMapper.deleteByPrimaryKey(1L);
```
通过以上步骤,我们可以使用通用mapper插件实现泛型通用增删改查操作,避免了大量的SQL编写,提高了开发效率。
阅读全文