使用流收集器从 java 对象获取键值
Get key-values from java object using stream collectors
我正在尝试使用流和收集器从对象列表中获取键和值列表,但我不知道这是否可行。
我有这个class:
public class MyObject {
private int key1;
private String key2;
private String key3;
public int getKey1() { return key1; }
public void setKey1(int key1) { this.key1 = key1; }
public String getKey2() { return key2; }
public void setKey2(String key2) { this.key2 = key2; }
public String getKey3() { return key3; }
public void setKey3(String key3) { this.key3 = key3; }
}
我想处理这个对象的列表并获取所有值和所有键,用逗号分隔。
List<MyObject> objectList = myObjectList;
String keys = objectList.stream().collect(Collectors.joining(", ","(", ")"));
String values = Collections.nCopies(objectList.size(), "?").stream().collect(Collectors.joining(", ", " (", ")"));
有谁知道这是否可能?或者我应该尝试其他选择?
对于 Stream<MyObject>
的每个元素,您可以通过 Stream#flatMap
和 Stream.of
:
创建其键**的 Stream<String>
*
String keys = objectList
.stream()
.flatMap(o -> Stream.of(o.getKey1(), o.getKey2(), o.getKey3()).map(Object::toString))
.collect(Collectors.joining(",", "(", ")"));
*由于某些字段(键)不是String
类型,Stream<Object>
可以通过Stream#map(Object::toString)
变成Stream<String>
。
**如果您有值的吸气剂,则值也是可能的。
更进一步,我会为 class 定义 List
个提取器 (Function<MyObject, String>
)(return 这个列表可以有一个静态方法):
public static List<Function<MyObject, String>> getExtractors() {
return Arrays.asList(
o -> String.valueOf(o.getKey1()),
MyObject::getKey2,
MyObject::getKey3
);
}
.flatMap(o -> getExtractors().stream().map(extractor -> extractor.apply(o)))
我正在尝试使用流和收集器从对象列表中获取键和值列表,但我不知道这是否可行。
我有这个class:
public class MyObject {
private int key1;
private String key2;
private String key3;
public int getKey1() { return key1; }
public void setKey1(int key1) { this.key1 = key1; }
public String getKey2() { return key2; }
public void setKey2(String key2) { this.key2 = key2; }
public String getKey3() { return key3; }
public void setKey3(String key3) { this.key3 = key3; }
}
我想处理这个对象的列表并获取所有值和所有键,用逗号分隔。
List<MyObject> objectList = myObjectList;
String keys = objectList.stream().collect(Collectors.joining(", ","(", ")"));
String values = Collections.nCopies(objectList.size(), "?").stream().collect(Collectors.joining(", ", " (", ")"));
有谁知道这是否可能?或者我应该尝试其他选择?
对于 Stream<MyObject>
的每个元素,您可以通过 Stream#flatMap
和 Stream.of
:
Stream<String>
*
String keys = objectList
.stream()
.flatMap(o -> Stream.of(o.getKey1(), o.getKey2(), o.getKey3()).map(Object::toString))
.collect(Collectors.joining(",", "(", ")"));
*由于某些字段(键)不是String
类型,Stream<Object>
可以通过Stream#map(Object::toString)
变成Stream<String>
。
**如果您有值的吸气剂,则值也是可能的。
更进一步,我会为 class 定义 List
个提取器 (Function<MyObject, String>
)(return 这个列表可以有一个静态方法):
public static List<Function<MyObject, String>> getExtractors() {
return Arrays.asList(
o -> String.valueOf(o.getKey1()),
MyObject::getKey2,
MyObject::getKey3
);
}
.flatMap(o -> getExtractors().stream().map(extractor -> extractor.apply(o)))