可以使用传统循环或 Java 8 的流(Stream)API来实现这一逻辑。以下是这两种方法的示例代码:
1. 使用传统循环
import java.util.List;
public class Main {
public static void main(String[] args) {
List<MyObject> list = ...; // 初始对象列表
String versionToRecord = null;
for (int i = list.size() - 1; i > 0; i--) {
MyObject current = list.get(i);
MyObject previous = list.get(i - 1);
if (!current.getName().equals(previous.getName())) {
versionToRecord = current.getVersion();
break;
}
}
// 使用 versionToRecord
}
}
class MyObject {
private String name;
private String version;
// getters and setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getVersion() { return version; }
public void setVersion(String version) { this.version = version; }
}
2. 使用 Java 8 流(Stream)API
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<MyObject> list = ...; // 初始化对象列表
Optional<String> versionToRecord =
list.stream()
.reduce((prev, curr) -> {
if (!curr.getName().equals(prev.getName())) {
return curr; // 找到不同的name时返回当前对象
}
return prev; // 否则继续比较
})
.map(MyObject::getVersion);
// 使用 versionToRecord.orElse(null)
}
}
class MyObject {
private String name;
private String version;
// getters and setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getVersion() { return version; }
public void setVersion(String version) { this.version = version; }
}
另外的方式
在 Java 中处理这种逻辑可以通过遍历列表并比较元素来实现。假设对象列表是一个 List
对象,并且每个对象有两个属性:name
和 version
。为了简化问题,我们可以创建一个简单的示例类 MyObject
并使用它来填充列表。以下是一个可能的实现方式:
首先定义 MyObject
类:
public class MyObject {
private String name;
private String version;
public MyObject(String name, String version) {
this.name = name;
this.version = version;
}
public String getName() {
return name;
}
public String getVersion() {
return version;
}
}
然后可以创建一个方法来处理需求:
import java.util.List;
public class ObjectComparator {
public static void compareObjects(List<MyObject> list) {
if (list == null || list.size() < 2) {
System.out.println("List is too small to compare.");
return;
}
for (int i = 0; i < list.size() - 1; i++) {
MyObject current = list.get(i);
MyObject next = list.get(i + 1);
// Compare the names of two consecutive objects.
if (!current.getName().equals(next.getName())) {
System.out.println("Name difference found between index " + i + " and " + (i + 1));
System.out.println("Recording version: " + next.getVersion());
return; // Stop after finding the first difference.
}
}
System.out.println("All names are the same.");
}
public static void main(String[] args) {
List<MyObject> list = Arrays.asList(
new MyObject("name1", "v1"),
new MyObject("name1", "v2"),
new MyObject("name2", "v3")
);
compareObjects(list);
}
}
在这个例子中,我们从列表的第一个元素开始,逐个比较相邻的两个元素的 name
属性。如果找到不同的 name
,就打印出下一个对象的 version
属性,并结束循环。如果没有找到任何不同,则打印所有名字都一样。
请注意,这个示例假定的列表至少有两个元素,并且 name
是区分大小写的。如果需要忽略大小写,可以在比较 name
时将它们转换为统一的形式(例如全部转为小写)。此外,根据实际需求,可能还需要调整错误处理和输出信息。