我已經在這里問過一個關于這個的問題,但是,這個答案只涉及字串。我無法編輯它,因為那里已經有幾個答案。
現在,我知道如何用那個帖子中給出的空格來分割它。但是,我怎樣才能將它與自定義類的物件分開,如下所示:
public class User{
private boolean isAdult = false;
private int age = 0;
@Override
public String toString(){
return "User : { isAdult = " isAdult " age = " age "}"
}
// getters and setters
}
現在,我想在錯誤的地方進行拆分isAdult。例如我有這個陣列:
[User : { isAdult = true age = 19}, User : { isAdult = false age = 10}, User : { isAdult = true age = 38}, User : { isAdult = false age = 17}, User : { isAdult = true age = 19}]
現在,在分裂為isAdult假時,它將是這樣的:
Array1 = [User : { isAdult = true age = 19}]
Array2 = [User : { isAdult = true age = 38}]
Array3 = [User : { isAdult = true age = 19}]
那么,我怎樣才能在 java 或 Kotlin 中實作這一點
uj5u.com熱心網友回復:
這是一個科特林答案
我并不完全清楚,但假設您正在使用一個User物件陣列,這個函式將回傳一個陣列陣列,其中每個用戶都是成人:
fun convert(array : Array<User>) : Array<Array<User>> =
array.filter { it.isAdult }.map { arrayOf(it) }.toTypedArray()
編輯:
從接受的答案來看,您希望將其組合在一起以供成年的連續用戶使用,這是 kotlin 中演示它的完整作業程式。convert沒有分組,convert2有:
data class User(var isAdult : Boolean, var age: Int) {
override fun toString(): String {
return "User : { isAdult = $isAdult age = $age}"
}
}
fun main() {
val users = arrayOf(
User(true, 3),
User(true, 5),
User(false, 6),
User(true, 7),
User(false, 9),
User(true, 11)
)
for (array in convert(users)) {
println(array.contentToString())
}
println("==============")
for (array in convert2(users)) {
println(array.contentToString())
}
}
fun convert(array : Array<User>) : Array<Array<User>> =
array.filter { it.isAdult }.map { arrayOf(it) }.toTypedArray()
fun convert2(array : Array<User>) : Array<Array<User>> =
array.fold(arrayOf(arrayOf())) { result, user ->
if (user.isAdult) {
result.copyOf(result.lastIndex).filterNotNull().toTypedArray() (result.last() user)
} else result arrayOf<User>()
}
輸出:
[User : { isAdult = true age = 3}]
[User : { isAdult = true age = 5}]
[User : { isAdult = true age = 7}]
[User : { isAdult = true age = 11}]
==============
[User : { isAdult = true age = 3}, User : { isAdult = true age = 5}]
[User : { isAdult = true age = 7}]
[User : { isAdult = true age = 11}]
uj5u.com熱心網友回復:
基于 tquadrat 的回答(在 Java 中):
public static class User{
boolean isFalse;
int value;
public User(boolean b, int v){
this.isFalse = b;
this.value = v;
}
public String toString() { return "User(" this.isFalse ", " this.value ")"; }
}
public static void main(String[] args) {
User[] users = {new User(true, 5), new User(true, 1),new User(false, 7),
new User(true, 10), new User(false, 3)};
ArrayList<User[]> output = new ArrayList<>();
int start = 0;
int end = 0;
while( end < users.length )
{
if( users[end].isFalse == false)
{
output.add( Arrays.copyOfRange( users, start, end ));
start = end 1;
}
end;
}
if( start < end ) output.add( Arrays.copyOfRange( users, start, end ));
for (User[] arr: output){
System.out.println(Arrays.toString(arr));
}
}
給出輸出:
[User(true, 5), User(true, 1)]
[User(true, 10)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477489.html
