2017-12-21 16 views
1

구분 기호으로 쉼표로 구분하는 효과적인 방법은 일까요?문자열을 쉼표로 구분하여 추가하는 효과적인 방법

Java8에는 StringUtils.join(java.lang.Iterable,char)가있다.

Kotlin에 대해서만 배열/목록에서 문자열로 변환하는 joinToString이 발견되었습니다. 알다시피, joinToString 전체 목록/배열을 변환합니다. 배열에서 쉼표로 구분 된 문자열을 모두 변환하지 않고 일부 항목 만 변환하려면 어떻게해야합니까? 어떻게 그럴 수 있을까요? Kotlin에서 짧고 우아한 뭔가가 있습니까 (분명히 내 자신의 기능을 만들 수 있지만 궁금합니다).

list.forEachIndexed { index, item -> 
    if (item.isGreen) { 
     ...   
    } 
} 

답변

6
val greenString = list.filter(ItemClass::isGreen).joinToString() 

, 과 itemClass는 isGreen 기능이나 속성을 정의하여 항목의 유형입니다. ItemClass::isGreen은이 메서드/속성에 대한 참조입니다.

동일한 효과에 대해 람다를 사용할 수도 있습니다 (다른 답변 참조).


편집 : 당신은 객체가 변환 인수와 함께 joinToString 기능의 String로 표현되는 방법을 지정할 수 있습니다.
이 그것이 일반 괄호 외부에 제공 할 수있는 마지막 매개 변수이기 때문에 :

list.filter(ItemClass::isGreen).joinToString() { it.content.text } 

당신은 지금이라도 모두 함께 괄호를 생략 할 수는 있지만, 다른 인수를 사용할 수있다.
참조 스타일 (: :)은 복잡한 표현이고 특정 메서드 나 속성에 대한 직접적인 참조가 아니므로 여기에서 사용할 수 없습니다.

+0

내 항목 개체가 두 개의 개별 개체로 구성되는 경우 어떻게해야합니까? 'ItemClass :: isGreen'과'itemClass :: content' 그리고 쓴 것처럼'ItemClass :: isGreen'에 의해 필터링하고 싶습니다만, joinToString'itemClass :: content.name' 만 – JoshuaMad

+1

['joinToString'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/join-to-string.html)에는'(T) -> String' 유형의 람다를 사용하는'transform' 매개 변수가 있습니다. '{it.content.name} '을 전달할 수 있습니다. – zsmb13

+0

@ zsmb13 실용적인 사례를 적어주세요. – JoshuaMad

2

이 예를 들어, 당신은이 작업을 수행 할 수 있습니다 여기에

list 
    .filter { it.isGreen } 
    .joinToString()