List<SFunction<>>使用
时间: 2025-06-29 08:22:56 浏览: 10
### 使用 Java 中的 `List` 和 `SFunction`
在 Java 编程中,`java.util.List` 是一种有序集合,允许重复元素。而 `SFunction<T,R>` 则是一个函数接口,通常用于表示方法引用或 lambda 表达式的参数。
为了展示如何结合使用这两个特性,可以考虑如下场景:假设有一个包含多个对象的列表,并希望基于某个属性对这些对象进行处理或过滤操作。
#### 创建实体类
首先定义一个简单的实体类:
```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 void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
```
#### 处理 `List<Person>`
接下来创建并填充一个 `List<Person>` 实例:
```java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
// ...
List<Person> people = new ArrayList<>(Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
));
```
现在可以通过传递给流 API 的 `filter()` 方法来筛选特定条件下的人员记录。这里将采用 `SFunction` 来指定要访问的对象字段作为谓词的一部分:
```java
// 导入静态方法以便简化语法糖
import static java.util.Comparator.comparingInt;
import static java.util.function.Function.identity;
// 定义辅助工具类以支持 SFunction 转换为 Function
class Functions {
public static <T, R> Function<T, R> toFunction(SFunction<T, ? extends R> getter){
return t -> getter.apply(t);
}
}
// 应用 Stream API 进行数据转换
List<String> namesOfAdults = people.stream()
.filter(p -> p.getAge() >= 18)
.map(Functions.toFunction(Person::getName))
.collect(Collectors.toList());
System.out.println(namesOfAdults); // 输出 ["Alice", "Bob", "Charlie"]
```
上述代码片段展示了如何利用 `SFunction` 将方法引用转化为常规的功能接口实例,从而可以在更复杂的表达式中灵活运用它们[^1]。
阅读全文
相关推荐








<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<body>
<input type="button" value="新增" onclick="add()">
ID
姓名
年龄
密码
修改 删除
<c:if test="${not empty list }">
<c:forEach items="${list }" var="user" varStatus="s">
${s.count}
${user.username}
${user.age}
${user.password}
修改
删除
</c:forEach>
</c:if>
<script >function add(){
location.href="add.jsp";
}
function updatemethod(userid) {
var id = parseInt('<%= session.getAttribute("id") %>');
if (userid != id) {
alert("你不能修改别人的信息");
} else {
window.location.href = "update.jsp";
}
}
function deletemethod(userid) {
var id = parseInt('<%= session.getAttribute("id") %>');
if (userid != id) {
alert("你不能删除别人的信息");
} else {
if(confirm("你确定要删除自己的信息吗?")) {
window.location.href = "index.jsp";
}
}
}</script>
</body>
</html>上述代码哪里报错,要如何修改








优化下面的代码,要求固定侧边栏和头部,解决侧边栏遮挡内容显示区域的情况<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>后台管理界面示例</title> <style> body { margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif; } header { background-color: #333; color: #fff; display: flex; justify-content: space-between; align-items: center; padding: 20px 20px 20px 20px; position: fixed; top: 0; left: 0; right: 0; z-index: 1; } header h1 { margin: 0; font-size: 24px; } header .user { display: flex; align-items: center; cursor: pointer; } header .user img { width: 30px; height: 30px; border-radius: 50%; margin-right: 10px; } .sidebar { background-color: #eee; position: absolute; top: 70px; left: -200px; bottom: 0; width: 200px; padding: 10px; overflow: auto; z-index: 1; transition: left 0.3s ease-in-out; } .sidebar.show { left: 0; } .sidebar h2 { margin: 0; font-size: 18px; margin-bottom: 10px; } .sidebar ul { padding: 0; margin: 0; list-style: none; } .sidebar li { margin-bottom: 5px; } .sidebar a { display: block; padding: 5px 10px; color: #333; border-radius: 5px; text-decoration: none; background-color: #fff; transition: background-color 0.2s ease-in-out; } .sidebar a:hover { background-color: #ddd; } .content { margin: 60px 0 0 220px; padding: 10px; background-color: #f5f5f5; min-height: calc(100vh - 70px - 10px); } </style> </head> <body> 中央管理平台
未登录 功能模块 用户管理 添加用户 删除用户 修改用户 数据库管理 备份数据库 还原数据库 页面管理 添加页面 删除页面 修改页面 <script> // 动态计算内容区域的左边距,避免与侧边栏重合 function adjustContentMargin() { const sidebarWidth = document.querySelector('.sidebar').offsetWidth; document.querySelector('.content').style.marginLeft = sidebarWidth + 'px'; } adjustContentMargin(); window.addEventListener('resize', adjustContentMargin); // 点击菜单按钮时显示/隐藏侧边栏 document.querySelector('.menu-btn').addEventListener('click', () => { document.querySelector('.sidebar').classList.toggle('show'); }); // 模拟后端数据传来时,只刷新头部和侧边栏之外的区域 setTimeout(() => { document.querySelector('.content').innerHTML = '欢迎使用中央管理平台这里是内容区域,只有在后端有数据传来时才会刷新。'; adjustContentMargin(); // 内容区域高度可能会变化,需要重新计算左边距 }, 3000); </script> </body> </html>


