이전 구직 기간 동안 나는 매우 기본적인 질문을 한 면접관을 만났다는 것을 기억합니다. 문제는 : 목록에는 10 개의 요소가 있으며 지금 3 개의 요소를 삭제하고 싶습니다. 어떻게해야하나요? 나는 당시에 그것에 대해 생각하지 않았으므로 목록에 직접 사용할 수있는 자체 제거 방법이 있다고 말했습니다. 그는 말했다. 자세히 설명 해주세요. 루프 용 A를 쓰고 싶다고 말했고, 루프 수는 목록의 길이이며, 루프에서 삭제하려는 요소를 직접 삭제합니다.
그 당시 나는 생각하고 그런 간단한 질문을했습니다. 면접관은 "돌아갈 때 직접 시도해 볼 수 있습니다. 당신이 말한대로 글을 쓰면 오류를보고 할 것인지 확인하십시오. 그런 다음 혼란 스러웠습니다. 이것은 간단한 질문 이었지만 매일 코딩 에서이 작은 세부 사항에주의를 기울이지 않았으며 인터뷰 결과를 상상할 수 있습니다.
돌아간 후 한 번 시도했고 실제로 오류를보고했습니다. 트래버스 중에 목록 작동이 삭제되거나 추가되었는지 여부에 관계없이 목록 작업이 수정되지 않은 것으로 나타났습니다. 트래버스 동안 새로운 요소가 컬렉션에 추가되면 죽은 루프가 발생할 수 있기 때문입니다. 또한, 트래버스 동안 요소가 삭제 된 경우, 트래버스에서 다음 테이블의 범위를 가로 지르는 것과 같은 문제가 발생합니다. 일반적인 작동 방법은 addall 방법 및 removeall 방법을 통해 구현 된 기능입니다.
예를 들어, 다음입니다
@testpublic void myTestLearnmore () {list <string> testList = new ArrayList <> (); testList.Add ( "1 Yang"); testList.add ( "1 li"); testList.add ( "1 Wang"); testList.Add ( "1 Zhang"); testList.add ( "2 Yang"); testList.Add ( "2 Sun"); testList.Add ( "2 Zhao"); List <string> temaddlist = new ArrayList <> (); for (문자열 테스트 : testList) {if (test.startSwith ( "1")) {temaddlist.add (test); }} testList.removeall (temaddlist); System.out.println (json.tojsonstring (testList));}인쇄 결과는 다음과 같습니다. [ "2 양", "2 Suns", "2 Zhao"]
이것은 운영하는 진정한 방법입니다. 그러나 오늘날 내가 이야기하고 싶은 것은 실제로 Java 8의 새로운 컬렉션 방법입니다. 예를 들어, 먼저 임시 컬렉션을 만들고 Traversal을 통해 임시 컬렉션을 제거 해야하는 요소를 넣고 마지막으로 원래 컬렉션에서 전체적으로 삭제하십시오. 이런 식으로 5 ~ 6 줄의 코드를 작성해야하며 Java 8에서 한 줄의 코드로 수행 할 수 있습니다. 이것은 다음 줄입니다.
testList.removeif (test-> test.startSwith ( "1"));
이 코드의 의미는 removeif 매개 변수 형식을 준수하는 요소를 제거하는 것이므로이 코드 라인 후 테스트 목록을 인쇄하면 1으로 시작하는 요소를 인쇄하지 않습니다.
이 작은 세부 사항은 실제로 매일 코딩 프로세스에 축적됩니다. 함정이 너무 많으면 나중에 쓸 때주의를 기울일 것입니다. Java에서 Equals를 사용할 때와 마찬가지로, 당신은 항상 알려진 상수를 평등 앞에 놓아 널 포인터 예외를 방지합니다. 컬렉션에 Lambda 표현식을 사용하는 경우 먼저 컬렉션이 Objects.nonnull ()을 통해 NULL인지 판단해야합니다. 객체를 인쇄 할 때는 객체의 toString () 메소드를 직접 호출하지 마십시오. 물체의 물체를 전달해야하므로 객체가 널이라도 인쇄 할 수 있도록 객체를 통과해야합니다. Objects 클래스는 Java7에 추가 된 새로운 도구 클래스입니다.
요약
위는 편집기가 RemoveIf에 소개 한 컬렉션에 새로 추가 된 Java8 방법입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨주세요. 편집자는 제 시간에 모든 사람에게 답장 할 것입니다!