Почему Объединение не функционирует в LINQ, удаляют дублирующиеся записи?

В основном это - шаблон, где Вы пишете метод, чтобы сделать вещи, которые всегда требуются, например, распределение ресурсов и очистка, и делают передачу вызывающей стороны в, "что мы хотим сделать с ресурсом". Например:

public interface InputStreamAction
{
    void useStream(InputStream stream) throws IOException;
}

// Somewhere else    

public void executeWithFile(String filename, InputStreamAction action)
    throws IOException
{
    InputStream stream = new FileInputStream(filename);
    try {
        action.useStream(stream);
    } finally {
        stream.close();
    }
}

// Calling it
executeWithFile("filename.txt", new InputStreamAction()
{
    public void useStream(InputStream stream) throws IOException
    {
        // Code to use the stream goes here
    }
});

// Calling it with Java 8 Lambda Expression:
executeWithFile("filename.txt", s -> System.out.println(s.read()));

// Or with Java 8 Method reference:
executeWithFile("filename.txt", ClassName::methodName);

код вызова не должен волноваться об открываться/очищать стороне - это будет заботиться о executeWithFile.

Это было откровенно болезненно в Java, потому что закрытия были так многословны, начиная с Java, как который могут быть реализованы 8 лямбда-выражений на многих других языках (например, лямбда-выражения C# или Groovy), и этот особый случай обрабатывается начиная с Java 7 с try-with-resources и AutoClosable потоки.

, Хотя "выделяют и очистка" является типичным данным примером, существует много других возможных примеров - обработка транзакции, вход, выполняя некоторый код с большим количеством полномочий и т.д. Это в основном немного похоже шаблонный шаблон метода , но без наследования.

6
задан MPelletier 5 May 2012 в 14:04
поделиться

2 ответа

Linq Union работает так, как вы хотите. Убедитесь, что ваши входные файлы верны (например, одна из строк может содержать пробел перед новой строкой) или Trim () строки после разделения?

var list1 = new[] { "a", "s", "d" };
var list2 = new[] { "d", "a", "f", "123" };
var union = list1.Union(list2);
union.Dump(); // this is a LinqPad method

В linqpad результат {"a", "s", "d", "f", "123"}

16
ответ дан 8 December 2019 в 13:01
поделиться

Думаю, вы хотите использовать функцию Distinct. Затем в конце вашего оператора LINQ выполните .Distinct ();

var distinctList = yourCombinedList.Distinct();

Подобно «SELECT DISTINCT» в SQL :)

2
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: