aggregateMongoTemplate返回的方法AggregationResults<T>,其中T是与mongo集合对应的类.
有时,我们只需要该集合中的单个(例如属性abc)或几个属性(pqr和xyz),具体取决于特定条件.在这些情况下,我们可以将整个集合检索到T类中,也可以创建一个包含properties(abc)或(pqr,xyz)的新类.
有没有办法将这些单个属性映射到List<String>两个属性作为键值对HashMap<String, String>?
我们所有人都知道String在java中是不可变的 - 一旦创建了字符串,就无法更改内容.
String使用字符数组char[] value来存储字符串内容,这里是java代码 -
/** The value is used for character storage. */
private final char value[];
Run Code Online (Sandbox Code Playgroud)
如果我们可以访问该字段values[]并进行更改,该怎么办?看到这段代码 -
String name = "Harish";
System.out.println(name); // Harish
Field field = name.getClass().getDeclaredField("value");
field.setAccessible(true);
char[] value = (char[]) field.get(name);
value[0] = 'G';
value[1] = 'i';
System.out.println(Arrays.toString(value)); // [G, i, r, i, s, h]
System.out.println(name); // Girish
Run Code Online (Sandbox Code Playgroud)
这样,我认为,我们可以改变字符串的内容,这违反了字符串不变性原则.
我错过了什么吗?
我正在学习Java8,想要使用Java8中的流API执行以下操作。
输入: (1,2,3,4,5,6,7,8,9) 列表
我可以在传统java中的单个for循环中执行此操作,例如
List<Integer> ints = Arrays.asList(3,4,2,5,6,7,4,5);
List<Integer> oddList = new ArrayList<>();
List<Integer> evenList = new ArrayList<>();
for (Integer i : ints) {
if (i % 2 == 0) {
evenList.add(i);
} else {
oddList.add(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道一种以 Java8 风格执行此操作的方法,如下所示 -
List<Integer> evens = ints.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
List<Integer> odds = ints.stream().filter(i -> i % 2 == 1).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但这里的问题是我迭代了两次而不是一次整数。有没有一种方法可以做到这一点而无需在流中迭代两次?
java ×3
immutability ×1
java-8 ×1
java-stream ×1
mongodb ×1
spring ×1
spring-mvc ×1
string ×1
string-pool ×1