Java에서 문자열 목록을 초기화하는 가장 짧은 방법은 무엇입니까?
문자열 목록과 문자열 배열, 즉 "s1", "s2", "s3"문자열 요소를 포함하는 목록 / 배열을 초기화하는 가장 짧은 방법 (코드에서)을 찾고 있습니다.
다양한 옵션이 있습니다. 개인적으로 저는 Guava를 사용하는 것을 좋아합니다 .
List<String> strings = Lists.newArrayList("s1", "s2", "s3");
(물론 구아바는 가치있는 도서관입니다 :)
JDK 만 사용하면 다음을 사용할 수 있습니다.
List<String> strings = Arrays.asList("s1", "s2", "s3");
이것은를 반환 할 ArrayList
것이지만 그것은 정상적 이지 않습니다 . java.util.ArrayList
그것은 가변적이지만 고정 된 크기 인 내부 하나입니다.
개인적으로 나는 무슨 일이 일어나고 있는지 (반환 될 목록 구현)을 명확히하기 때문에 Guava 버전을 선호합니다. 또한있어 여전히 당신이 정적 메소드를 가져 오는 경우에 무슨 일이 일어나고 있는지 웁니다
// import static com.google.common.collect.Lists.newArrayList;
List<String> strings = newArrayList("s1", "s2", "s3");
... 정적으로 임포트 asList
하면 조금 이상해 보입니다.
다른 구아바 옵션 (변경 가능한 목록을 원하지 않는 경우) :
ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3");
나는 일반적으로 원하는 중 하나 (케이스가있는 완전 변경 가능한 목록이 Lists.newArrayList
최고입니다) 또는 완전 불변의리스트를 (이 경우는 ImmutableList.of
최고입니다). 변경 가능하지만 고정 된 크기의 목록을 정말로 원하는 경우 는 드뭅니다 .
자바 9 이상
Java 9에는 List.of
다음과 같이 사용되는 편리한 방법이 도입되었습니다 .
List<String> l = List.of("s1", "s2", "s3");
Java 8 이상
다음은 몇 가지 대안입니다.
// Short, but the resulting list is fixed size.
List<String> list1 = Arrays.asList("s1", "s2", "s3");
// Similar to above, but the resulting list can grow.
List<String> list2 = new ArrayList<>(Arrays.asList("s1", "s2", "s3"));
// Using initialization block. Useful if you need to "compute" the strings.
List<String> list3 = new ArrayList<String>() {{
add("s1");
add("s2");
add("s3");
}};
배열에 관해서는 다음과 같이 선언 지점에서 초기화 할 수 있습니다.
String[] arr = { "s1", "s2", "s3" };
다시 초기화하거나 변수에 저장하지 않고 생성해야하는 경우 다음을 수행합니다.
new String[] { "s1", "s2", "s3" }
그래도 문자열 상수가 다음과 같으면
String[] arr = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",
"s11", "s12", "s13" };
이것들에서 나는 보통 쓰기를 선호합니다
String[] arr = "s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13".split(",");
List<String> stringList = Arrays.asList("s1", "s2", "s3");
이러한 모든 객체는 JDK에 있습니다.
추신 : 로 aioobe는 언급이 목록은 고정 된 크기의 수 있습니다.
Arrays
표준 Java API에서 클래스를 사용할 수 있습니다 . http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T ...)
List<String> strings = Arrays.asList("s1", "s2", "s3");
결과 목록은 크기가 고정되어 있습니다 (추가 할 수 없음).
Eclipse Collections를 사용 하면 다음을 작성할 수 있습니다.
List<String> list = Lists.mutable.with("s1", "s2", "s3");
또한 유형 및 변경 가능 또는 불변 여부에 대해 더 구체적으로 지정할 수 있습니다.
MutableList<String> mList = Lists.mutable.with("s1", "s2", "s3");
ImmutableList<String> iList = Lists.immutable.with("s1", "s2", "s3");
세트, 가방 및지도에서도 동일한 작업을 수행 할 수 있습니다.
Set<String> set = Sets.mutable.with("s1", "s2", "s3");
MutableSet<String> mSet = Sets.mutable.with("s1", "s2", "s3");
ImmutableSet<String> iSet = Sets.immutable.with("s1", "s2", "s3");
Bag<String> bag = Bags.mutable.with("s1", "s2", "s3");
MutableBag<String> mBag = Bags.mutable.with("s1", "s2", "s3");
ImmutableBag<String> iBag = Bags.immutable.with("s1", "s2", "s3");
Map<String, String> map =
Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
MutableMap<String, String> mMap =
Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
ImmutableMap<String, String> iMap =
Maps.immutable.with("s1", "s1", "s2", "s2", "s3", "s3");
SortedSets, SortedBags 및 SortedMaps에 대한 팩토리도 있습니다.
SortedSet<String> sortedSet = SortedSets.mutable.with("s1", "s2", "s3");
MutableSortedSet<String> mSortedSet = SortedSets.mutable.with("s1", "s2", "s3");
ImmutableSortedSet<String> iSortedSet = SortedSets.immutable.with("s1", "s2", "s3");
SortedBag<String> sortedBag = SortedBags.mutable.with("s1", "s2", "s3");
MutableSortedBag<String> mSortedBag = SortedBags.mutable.with("s1", "s2", "s3");
ImmutableSortedBag<String> iSortedBag = SortedBags.immutable.with("s1", "s2", "s3");
SortedMap<String, String> sortedMap =
SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
MutableSortedMap<String, String> mSortedMap =
SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
ImmutableSortedMap<String, String> iSortedMap =
SortedMaps.immutable.with("s1", "s1", "s2", "s2", "s3","s3");
참고 : 저는 Eclipse Collections의 커미터입니다.
JDK2
List<String> list = Arrays.asList("one", "two", "three");
JDK7
//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
JDK8
List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());
JDK9
List<String> list = List.of("one", "two", "three");
또한 Guava와 같은 다른 라이브러리에서 제공하는 많은 다른 방법이 있습니다.
I am not familiar with Guava, but almost all solutions mentioned in other answers and using the JDK suffer have some flaws:
The
Arrays.asList
method returns a fixed-size list.{{Double-brace initialization}} is known to create classpath clutter and slow down execution. It also requires one line of code per element.
Java 9: the static factory method
List.of
returns a structurally immutable list. Moreover,List.of
is value-based, and therefore its contract does not guarantee that it will return a new object each time.
Here is a Java 8 one-liner for gathering multiple individual objects into an ArrayList
, or any collection for that matter.
List<String> list = Stream.of("s1", "s2", "s3").collect(Collectors.toCollection(ArrayList::new));
Note: aioobe's solution of copying a transitory collection (new ArrayList<>(Arrays.asList("s1", "s2", "s3"))
) is also excellent.
ReferenceURL : https://stackoverflow.com/questions/6520382/what-is-the-shortest-way-to-initialize-list-of-strings-in-java
'programing' 카테고리의 다른 글
PHP에서 아포스트로피 ( ') 대신 â € ™ 얻기 (0) | 2021.01.17 |
---|---|
Linux에서 어셈블러를 컴파일 / 실행 하시겠습니까? (0) | 2021.01.17 |
Rails로 문자열을 자르시겠습니까? (0) | 2021.01.17 |
Github README.md에서 디렉토리 트리를 나타내는 방법이 있습니까? (0) | 2021.01.17 |
HTML의 문자열에 대한 보이지 않는 구분 기호 (0) | 2021.01.17 |